【问题标题】:Php script returns json, but I am getting parseerrorPHP 脚本返回 json,但我收到 parseerror
【发布时间】:2013-01-26 10:24:16
【问题描述】:

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

使用以下 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);
?>

我收到解析错误。但是当我将 'return' 替换为 'echo' 时,效果很好。

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

我将通过这个 $.ajax 调用检索更复杂的数据,我期待“返回”能够正常工作,“回声”在我看来并不是一个好的解决方案。

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

谢谢。

【问题讨论】:

  • 您需要在某个时候将其回显。 Return 不输出任何内容。
  • 你想把json代码返回到哪个元素?您只需要将代码打印/回显到通过 AJAX REQUEST 请求的“文件”。回声是正确的。

标签: php jquery ajax json parse-error


【解决方案1】:

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

【讨论】:

  • 非常感谢,现在清楚多了。我期待 php 脚本作为一个函数工作。
  • 返回值也可以用在函数或方法之外的文件中。在这种情况下,文件将返回值传递给其他文件中的任何包含,并停止执行。
【解决方案2】:

当您在 php 中执行 return 时,它不会被打印出来。当您执行回显时,它会被打印出来。

php 或 Ajax 没有什么问题,只是上下文有问题。

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

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

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

      然后您可以在 jquery code 中将其作为 object.parameter 处理,正如我之前在此 example 中指定的那样。

      【讨论】:

        【解决方案5】:

        总是在ajax调用中回显或打印或解析php为html文件然后获取数据,这样会省很多力气。

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

        【讨论】:

          猜你喜欢
          • 2015-10-18
          • 2011-01-06
          • 2015-10-03
          • 2023-03-20
          • 1970-01-01
          相关资源
          最近更新 更多