0

我知道有类似的问题,但我想在这里得到一些澄清。

使用以下 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 调用检索更复杂的数据,并且我期待“返回”能够正常工作,“回声”在我看来并不是一个好的解决方案。

那么,你有什么建议?Ajax 设置或调用是否有问题,所以'return' 不起作用,'echo' 是一个好的解决方案吗?

谢谢。

4

5 回答 5

1

不,您的 ajax 设置没有问题,这是因为它return与 PHP 一起使用,objects或者variables它无法将值返回给其他语言,例如javascript. 当您使用echo它时,会将值发送到HTTP response以便您ajax response可以处理它。

处理复杂数据的最佳方法是将它们发送到数组中,例如:

$arr = array();
$arr['res'] = 'something';
$arr['res2'] = 'somethingelse'; 
echo json_encode($arr);

然后你可以object.parameterjquery code我之前在这个例子中指定的那样处理它。

于 2013-01-26T10:32:58.570 回答
1

return将数据返回给函数的调用者,并且由于您不在函数中,因此无法使用 return。 echo打印数据。echo走的路也是如此。

于 2013-01-26T10:29:41.683 回答
1

当您在 php 中执行 return 时,它不会被打印出来。当你做一个回声时,它会被打印出来。

php 或 Ajax 没有任何问题,只是上下文错误。

简单地说,当您需要捕获返回的数据并可能对其进行处理时,请使用 return。使用 return 的最佳情况是在函数中。

当您需要直接打印某些内容时,请使用 echo。

在这种情况下,我推荐使用回显和退出。

于 2013-01-26T10:30:13.983 回答
1

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

您可能还希望header('Content-Type: application/json');在您的 PHP 文件中包含所有内容以确保一切正常。

于 2013-01-26T10:32:07.407 回答
0

总是在ajax调用中将php打印或解析为html文件然后获取数据,这将为您节省很多精力。

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

于 2013-01-27T14:50:58.530 回答