Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php后端出现JSON错误_Php_Javascript_Ajax_Json - Fatal编程技术网

php后端出现JSON错误

php后端出现JSON错误,php,javascript,ajax,json,Php,Javascript,Ajax,Json,我以前从未使用过JSON,而且进展不顺利 我有一个返回JSON数组的PHP脚本(这是正确的术语吗?) 脚本返回: {“物品”:1000,“物品”:0,“捐赠”:0,“总数”:1000} 注意:脚本还将内容类型设置为application/json 下面是我处理该响应的前端javascript: function ajax(){ $.ajax({ url: '../ajax/goal_ajax.php', dataType: 'json',

我以前从未使用过JSON,而且进展不顺利

我有一个返回JSON数组的PHP脚本(这是正确的术语吗?) 脚本返回:
{“物品”:1000,“物品”:0,“捐赠”:0,“总数”:1000}

注意:脚本还将内容类型设置为
application/json

下面是我处理该响应的前端javascript:

function ajax(){
    $.ajax({
         url: '../ajax/goal_ajax.php',
         dataType: 'json',
         success: function( data ){
          // success! :D
          alert('success');
         }, error: function( data ){
          // data.responseText is what you want to display, that's your error.
          alert(data.responseText);
         }
    })
    //progressBar.set('value',data.total);
    //document.getElementById('txtCDInfo').innerHTML=txt;
} 
调用该函数时,我会收到一条带有以下消息的警报:
{“物品”:1000,“物品”:0,“捐赠”:0,“总数”:1000}

如果一切顺利,我会收到一个提示,上面写着
success
,对吗

有人能告诉我这里发生了什么事吗


谢谢大家!

这是jquery中记录最少的一件事,您需要做的是警告实际错误,以便对其进行调试。以下各点也是如此:

function my_ajax(){
    $.ajax({
         url: '/ajax/goal_ajax.php',
         dataType: 'json',
         success: function( data ){
          // success! :D
          alert('success');
         }, error: function(jqXHR, textStatus, errorThrown){
          // data.responseText is what you want to display, that's your error.
          alert(jqXHR+","+textStatus+","+errorThrown);
         }
    })
    //progressBar.set('value',data.total);
    //document.getElementById('txtCDInfo').innerHTML=txt;
} 
<?php
header('Content-type: application/json', true, 401); 
echo '{"items":1000,"mitems":0,"donations":0,"total":1000}';
?>
所以我做了两件事:

更改函数的名称(ajax有点不好的名称:S)并改进错误报告

您应该会收到“成功”警报是的。所以出了点问题

编辑:


刚刚注意到另一件事,我不认为“./”是引用url的好方法,通常是“/foo/ajax”,它允许您在任何页面上使用此函数。

这是jquery中记录最少的一件事,您需要做的是警告实际错误以调试它。以下各点也是如此:

function my_ajax(){
    $.ajax({
         url: '/ajax/goal_ajax.php',
         dataType: 'json',
         success: function( data ){
          // success! :D
          alert('success');
         }, error: function(jqXHR, textStatus, errorThrown){
          // data.responseText is what you want to display, that's your error.
          alert(jqXHR+","+textStatus+","+errorThrown);
         }
    })
    //progressBar.set('value',data.total);
    //document.getElementById('txtCDInfo').innerHTML=txt;
} 
<?php
header('Content-type: application/json', true, 401); 
echo '{"items":1000,"mitems":0,"donations":0,"total":1000}';
?>
所以我做了两件事:

更改函数的名称(ajax有点不好的名称:S)并改进错误报告

您应该会收到“成功”警报是的。所以出了点问题

编辑:


刚刚注意到另一件事,我不认为“./”是引用url的好方法,通常是“/foo/ajax”,它允许您在任何页面上使用此函数。

您是否在HTTP响应中定义MIME类型

尝试将内容类型标题添加到脚本的输出中

<?php
...
    $output = json_encode(...);
    header('Content-type: application/json');
    echo $output;
...
?>

您还可以尝试在$.ajax()调用中使用mimeType参数来覆盖响应类型


您是在Apache下运行PHP脚本,还是自己运行(脚本上的chmod u+x)?您可能需要使用一个PHP框架,如Zend、CodeIgniter或CakePHP,并定义一个控制器操作来处理AJAX请求,以获得正确的HTTP响应。

您是否在HTTP响应中定义MIME类型

尝试将内容类型标题添加到脚本的输出中

<?php
...
    $output = json_encode(...);
    header('Content-type: application/json');
    echo $output;
...
?>

您还可以尝试在$.ajax()调用中使用mimeType参数来覆盖响应类型


您是在Apache下运行PHP脚本,还是自己运行(脚本上的chmod u+x)?您可能需要使用一个PHP框架,如Zend、CodeIgniter或CakePHP,并定义一个控制器操作来处理您的AJAX请求,以获得正确的HTTP响应。

正如我上面提到的,您应该使用json_encode();函数,然后回显该输出。 不过,请确保对数组进行编码:

    <?
      $send = array(
                  'items' => '1000',
                  'mitems' => '0', 
                  'donations' => '0', 
                  'total' => '1000',
                );

      echo json_encode($send);
    ?>

正如我上面的人所说,您应该使用json_encode();函数,然后回显该输出。 不过,请确保对数组进行编码:

    <?
      $send = array(
                  'items' => '1000',
                  'mitems' => '0', 
                  'donations' => '0', 
                  'total' => '1000',
                );

      echo json_encode($send);
    ?>

可能是您的PHP脚本返回错误状态代码,即使打印出正确的结果,仍然会失败。我在我的系统上测试了你的脚本,得到了“成功”警报。然后,我将我的PHP脚本更改为以下内容:

function my_ajax(){
    $.ajax({
         url: '/ajax/goal_ajax.php',
         dataType: 'json',
         success: function( data ){
          // success! :D
          alert('success');
         }, error: function(jqXHR, textStatus, errorThrown){
          // data.responseText is what you want to display, that's your error.
          alert(jqXHR+","+textStatus+","+errorThrown);
         }
    })
    //progressBar.set('value',data.total);
    //document.getElementById('txtCDInfo').innerHTML=txt;
} 
<?php
header('Content-type: application/json', true, 401); 
echo '{"items":1000,"mitems":0,"donations":0,"total":1000}';
?>

注意,header函数的第三个参数将http响应代码设置为401,即使正确的输出被发送回客户端;根据官方规定,由于该状态代码,请求已失败。运行此代码后,我遇到了与您完全相同的问题


总之,您的脚本中可能存在导致脚本输出中未显示的非致命错误的内容。

可能是您的PHP脚本返回错误状态代码,即使它打印出正确的结果,它仍然失败。我在我的系统上测试了你的脚本,得到了“成功”警报。然后,我将我的PHP脚本更改为以下内容:

function my_ajax(){
    $.ajax({
         url: '/ajax/goal_ajax.php',
         dataType: 'json',
         success: function( data ){
          // success! :D
          alert('success');
         }, error: function(jqXHR, textStatus, errorThrown){
          // data.responseText is what you want to display, that's your error.
          alert(jqXHR+","+textStatus+","+errorThrown);
         }
    })
    //progressBar.set('value',data.total);
    //document.getElementById('txtCDInfo').innerHTML=txt;
} 
<?php
header('Content-type: application/json', true, 401); 
echo '{"items":1000,"mitems":0,"donations":0,"total":1000}';
?>

注意,header函数的第三个参数将http响应代码设置为401,即使正确的输出被发送回客户端;根据官方规定,由于该状态代码,请求已失败。运行此代码后,我遇到了与您完全相同的问题


总之,您的脚本中可能存在导致脚本输出中未显示的非致命错误的内容。

问题出在哪里,什么不起作用?如果一切正常,我应该会收到一个警告,提示“成功”,对吗?您是否抛出了内容类型标题?e、 g.
header('Content-Type:text/json')
技术上,他甚至不需要将Content-Type header设置为
json
,因为他在
dataType
中指定了
json
。将
error:function(data)
更改为
error:function(data,textStatus,errorshown)
并执行
alert(textStatus)
查看错误原因。您有权访问apache日志吗?您确定请求得到了适当的处理吗?你能用firebug来测试吗?有什么问题,什么不起作用?如果一切正常,我会得到一个警告,上面写着“成功”,对吗?你是在抛出一个内容类型标题吗?e、 g.
header('Content-Type:text/json')
技术上,他甚至不需要将Content-Type header设置为
json
,因为他在
dataType
中指定了
json
。将
error:function(data)
更改为
error:function(data,textStatus,errorshown)
并执行
alert(textStatus)
查看错误原因。您有权访问apache日志吗?您确定请求得到了适当的处理吗?你能用firebug来测试它吗?好的,我实现了你的函数,它重新运行了