PHP脚本返回json,但我得到了解析错误

时间:2013-01-26 10:24:16

标签: php jquery ajax json parse-error

我知道有类似的问题,但我想在此澄清一下。

使用以下Ajax设置:

        $.ajaxSetup({
        cache: true,
        dataType: 'json',
        error: function(xhr, status, error){
           console.log(status);
        },
        timeout: 60000, //Timeout of 60s
        type: 'POST',
        url: 'test.php'
    }); //Close $.ajaxSetup()

    $('#openTest').bind('click', function(){
    $.ajax({
        data: {val: "Hello", val2: "Hello2"},
        success: function(response){
            console.log('complete');
            console.log(response);
        }
    });

当'test.php'为:

<?php
$return= array ('one'=>'one1', 'two'=>'two1');
return json_encode($return);
?>

我得到了解析错误。但是当我用'echo'替换'return'时,它可以正常工作。

<?php
$return= array ('one'=>'one1', 'two'=>'two1');
echo json_encode($return);
?>

我将通过这个$ .ajax调用检索更复杂的数据,我期待“返回”工作,'echo'在我看来似乎不是很好的解决方案。

那么,你在暗示什么? Ajax设置或调用有什么问题,所以'return'不起作用,并且'echo'是一个很好的解决方案吗?

感谢。

5 个答案:

答案 0 :(得分:1)

return将数据返回给函数的调用者,因为您不在函数中,所以不能使用return。 echo打印数据。所以echo是要走的路。

答案 1 :(得分:1)

当您在php中返回时,它不会被打印。当你做回声时,会打印出来。

php或Ajax没有任何问题,只是背景错误。

Sinply put,当你需要捕获返回的数据并使用它时可以使用return。使用return的最佳案例是函数。

需要直接打印时使用echo。

在这种情况下,使用echo和exit是我推荐的。

答案 2 :(得分:1)

返回用于函数中以获取数据并在PHP中以某种方式使用它。 Echo用于ajax调用,因为您的PHP代码会将数据输出到调用它的任何内容(浏览器,您的ajax调用等)。

您可能还希望在PHP文件中使用header('Content-Type: application/json');来使事情正确无误。

答案 3 :(得分:1)

不,您的ajax设置没有问题,这是因为return与PHP objectsvariables一起使用,并且它无法将值返回给{{}等其他语言{1}}。当您使用javascript时,它会将值发送到echo,以便HTTP response可以处理它。

执行复杂数据的最佳方法是将它们发送到以下数组中:

ajax response

然后您可以在$arr = array(); $arr['res'] = 'something'; $arr['res2'] = 'somethingelse'; echo json_encode($arr); object.parameter处理jquery code,因为我之前已在此example中指定了它。

答案 4 :(得分:0)

总是在ajax调用中将回显或打印或解析为html文件,然后获取数据,这将为您节省大量的工作。

ajax只是读取文件,没有办法用PHP和JS两种不同的语言进行调用。 JS只是从服务器返回了该文件,如果它是php,那么它将被解释并以html或其他方式转到Ajax调用。