Mathieu Turcotte Mathieu Turcotte - 15 days ago 6
PHP Question

returning a PHP object from an ajax file to my javascript code

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 Ajax file, 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 Ajax file:

<?php
include_once "../../init.php";

$packageSerial = $_POST["packageSerial"];

$package = tbProductPackage::getInstanceByPackageSerial($packageSerial, $db);
return json_encode($package);
?>


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

Answer

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);
?>
Comments