JQuery Ajax不向PHP发送数据

时间:2014-02-04 15:19:28

标签: javascript php jquery ajax

下面的

myscript.js正在输出:

[{"orcamento":"10","atual":"20","desvio":"","data":"2015-01-01","nome_conta":"BBB","nome_categoria":"abc","nome_entidade":"def"}]

myscript.js:

if (addList.length) {
            $.ajax($.extend({}, ajaxObj, {
                data: { "addList": JSON.stringify(addList) },
                success: function (rows) {
                    $grid.pqGrid("commit", { type: 'add', rows: rows });

                },
                complete: function () {
                    $grid.pqGrid("hideLoading");
                    $grid.pqGrid("rollback", { type: 'add' });
                    $('#consola').text(JSON.stringify(addList));
                }
            }));
        }

上面的JSON数据必须发送到我的script.php下面:

if( isset($_POST["addList"]))            
{
    $addList = json_decode($_POST["addList"], true);
    var_dump ($addList);
    echo "test";
    exit();
}

虽然数据是正确的并且正在调用myscript.php但它并没有返回任何内容。我明白了:

NULLtest

我尝试使用GET而不是POST,但结果是一样的,上面的代码出了什么问题?

编辑: 这是ajax请求中使用的ajaxObj:

var ajaxObj = {
        dataType: "json",
        url:"../myscript.php",
        type: "POST",
        async: true,
        beforeSend: function (jqXHR, settings) {
            $grid.pqGrid("showLoading");
        }
    };

2 个答案:

答案 0 :(得分:2)

来自json_decode上的PHP文档:

NULL is returned if the json cannot be decoded or if the encoded data is deeper than the recursion limit.

所以很有可能你的JSON数据中有一些错误阻止了json_decode正确解析它,我已经通过jsonlint运行了那段代码并且确实说它是有效的JSON,但它值得检查发送给服务器的更大数据样本是否存在不一致。

除此之外,是否有任何理由在发送到服务器之前在数据对象上调用JSON.stringify?我会尝试将对象本身作为AJAX调用的数据参数发送,如下所示:

        $.ajax($.extend({}, ajaxObj, {
             data: { "addList": addList },
            success: function (rows) {
                $grid.pqGrid("commit", { type: 'add', rows: rows });

            },
            complete: function () {
                $grid.pqGrid("hideLoading");
                $grid.pqGrid("rollback", { type: 'add' });
                $('#consola').text(JSON.stringify(addList));
            }
        }));

看看是否有帮助:

编辑

我应该注意到,在我的原始答案中,您不需要在发布的数据上调用json_decode,jQuery会正确地将数据编码为post参数;它应该在PHP脚本中作为关联数组访问,尝试替换PHP var_dump($_POST['addList'][0]['orcamento']);中的当前var_dump语句,你应该好好去。

答案 1 :(得分:0)

首先,请确保您要发布到php文件,使用firebug或类似工具来跟踪您的脚本..

我没有看到您在javascript文件中定义目标PHP文件的部分..

常规的javascript代码可能如下所示:

jQuery.ajax({
     type : "post",
     dataType : "json",
     url : 'target.php',
     data : {foo:bar },
     success: function(response) {
        // do something with response...
     }
});  

如果您发现您在firebug上发布了正确的php文件中的正确参数,请尝试使用$_REQUEST,如果$_POST无效..

Firebug将向您显示PHP文件的响应..所以print_r($_REQUEST['addList'])来看看发生了什么......