Reputation: 354
So I'm still a newbie when it comes to javascript and php. I am having this issue:
from javascript, I scan a package's barcode using a barcode reader. I send this to an PHP file using ajax, Which builds an object, and needs to return it to my javascript code.
I'm doing this:
function LoadPackage(ScannedCode) {
var res;
console.time("Load package " + ScannedCode);
$.ajax({
type: "POST",
url: "ajax/3gmodule_inventory_ajax/getPackage.php",
data: "packageSerial=" + ScannedCode,
cache: false,
async: false //inline operation, cannot keep processing during the execution of the AJAX
}).success(function(result) {
res = $.parseJSON(result);
});
console.timeEnd("Load package " + ScannedCode);
return res;
}
The php file:
<?php
include_once "../../init.php";
$packageSerial = $_POST["packageSerial"];
$package = tbProductPackage::getInstanceByPackageSerial($packageSerial, $db);
return json_encode($package);
// edit: first part of the problem was here, I was supposed to ECHO here. not RETURN.
?>
I am 100% certain my object gets built properly. I did do a var_dump of my $package object, and everything is fine with it. However, when trying to get it back to javascript, I tried a bunch of different things, nothing works.
The $.parseJSON(result); statement seems to be giving me this error:
Uncaught SyntaxError: Unexpected end of JSON input
I also tried to use serialize(), but I get an error message:
Uncaught exception 'PDOException' with message 'You cannot serialize or unserialize PDO instances'
Basically, My database is in my object, I'm guessing I can't serialize it...
What am I doing wrong here?
Thank you
Upvotes: 4
Views: 6012
Reputation: 2713
In getPackage.php
page :
echo json_encode($package);
not use return
In Jquery should be :
data: {packageSerial:ScannedCode},
After success not need $.parseJSON(
because getPackage.php
already retrieve json encode
so, is should be :
}).success(function(result) {
res = result
});
also add dataType: 'json',
after data: {packageSerial:ScannedCode},
So, Final correction code is :
Jquery :
function LoadPackage(ScannedCode) {
var res;
console.time("Load package " + ScannedCode);
$.ajax({
context: this,
type: "POST",
url: "ajax/3gmodule_inventory_ajax/getPackage.php",
data: {packageSerial:ScannedCode},
dataType: 'json',
}).success(function(result) {
res = result;
});
console.timeEnd("Load package " + ScannedCode);
return res;
}
PHP :
<?php
include_once "../../init.php";
$packageSerial = $_POST["packageSerial"];
$package = tbProductPackage::getInstanceByPackageSerial($packageSerial, $db);
echo json_encode($package);
?>
Upvotes: 7
Reputation: 2091
Ajax expects the JSON inside the request body.
Use
die(json_encode($SOME_ARRAY_OR_OBJECT));
not "return" json_encode($SOME_ARRAY_OR_OBJECT)
Upvotes: 0
Reputation: 127
I don't know how your database is done, but as a first step, you could make a SELECT query and fetch it as an array. Then, json_encode would work without problem. Something along the lines of:
$vec = array();
$query="SELECT * From YourTable
WHERE 1";
$result= mysql_query($query) or die(mysql_error() . $query)
while ($r=mysql_fetch_array($result)) {
$vec [] = $r;
}
$toreturn=json_encode($vec );
Upvotes: -1