Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.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
Javascript Ajax请求总是触发错误,即使json_编码正确并且一切正常_Javascript_Php_Jquery_Json_Ajax - Fatal编程技术网

Javascript Ajax请求总是触发错误,即使json_编码正确并且一切正常

Javascript Ajax请求总是触发错误,即使json_编码正确并且一切正常,javascript,php,jquery,json,ajax,Javascript,Php,Jquery,Json,Ajax,我正在做一个电子商务,我实现了一个AJAX请求,以便以友好的方式从购物车中添加和删除项目。每次执行jQuery时,一切正常,它总是返回200 OK,但是错误事件被触发,而不是成功 这就是它的工作原理: 每次用户单击“添加到购物车”按钮时,Jquery将检查此项目是否可用,然后插入、添加或返回错误: 状态1=产品插入购物车(首次添加此产品时,购物车为空) 状态2=产品已添加到购物车(此产品已在购物车上,添加+1) 状态3=库存不足(购物车上的所有产品) jQUERY代码 $.ajax({

我正在做一个电子商务,我实现了一个AJAX请求,以便以友好的方式从购物车中添加和删除项目。每次执行jQuery时,一切正常,它总是返回200 OK,但是错误事件被触发,而不是成功

这就是它的工作原理:

每次用户单击“添加到购物车”按钮时,Jquery将检查此项目是否可用,然后插入、添加或返回错误:

  • 状态1=产品插入购物车(首次添加此产品时,购物车为空)
  • 状态2=产品已添加到购物车(此产品已在购物车上,添加+1)
  • 状态3=库存不足(购物车上的所有产品)
jQUERY代码

$.ajax({

    type: "GET",
    url: "addCart.php",
    data: { id: id, color: color },
    dataType: "json",

    success: function(result){ 
        if (result.status == 1){ alert("Product Inserted into Cart"); }
        if (result.status == 2){ alert("Product Added to Cart"); }
        if (result.status == 3){ alert("Not enough Stock"); }
    },

    error: function (result) {
        alert(result.responseText)
    }   

});
PHP代码(addCart.PHP)

每次执行代码时,一切正常,项目被添加到购物车,所有插入和更新都完成,它总是返回200 OK,但是错误事件被触发,而不是成功

重要的//////////////////////////////////////////////////////////////////////////////////strong

字符串$status$status\u txt(addCart.php)从不返回空值,它们总是返回整数和文本消息。要避免空值(“”“)解析错误

我已经尝试过但没有成功的事情:////////////////////////////////strong>

  • 删除(数据类型:“json”)
  • 将数据类型“json”更改为“text”
  • 强制一个标题('Content-Type:application/json')
  • 使用exit();在json_编码之后
  • 检查我的JSON在外部站点上是否有效,即:
我已经找到了一个临时解决问题的方法。我使用Javascriptsubstr(),获取errorresponseText上的状态号,然后对Ajax错误事件进行所有验证:

JAVASCRIPT解决方案

    error: function (result) {

        status = result.responseText.substr(10, 1); 
        if (status == 1){ alert("Product Inserted into Cart"); }
        if (status == 2){ alert("Product Added to Cart"); }
        if (status == 3){ alert("Not enough Stock"); }

    }
其中responseText返回Json结果:

{"status":1,"alert":"Product inserted to Cart"}
使用substr()将返回状态号(1、2或3):

我知道这不是正确的处理方法,这就是为什么我想修复这个让我发疯的错误

我做错了什么?我已经多次使用这段代码,我以前从来没有遇到过这个问题,我在StackOverflow上读过很多类似的问题,但是没有一个对我有用

感谢您的帮助

为我工作

addCart.php

## I REMOVED NON-RELEVANT CODES TO SIMPLIFY THIS QUESTION BUT ALL VALIDATIONS
## HAVE ALREADY BEEN DONE, THEN RETURN THE JSON RESPONSE...

if ($status == 1){
    $status_txt = "Product Inserted into Cart";

}elseif ($status == 2){
    $status_txt = "Product Added to Cart";

}elseif ($status == 3){
    $status_txt = "Not enough stock";

}

echo json_encode(array("status" => $status, "alert" => $status_txt));
<?php
// your inserts and checking here.    
$str = json_encode(array("status" => $status, "alert" => $status_txt));
echo $str;

您的JSON响应正文无效。这可以在……中看到

我得到
数组{“状态”:1,“警报”:“插入的产品”}

“Array”前缀无效,通常是PHP中意外的数组到字符串转换的指示符,在使用
echo
JSON之前。比如说

echo [1,2,3]; // Notice: Array to string conversion in ...
开发时,应始终运行PHP,并将错误报告设置为最高级别。在输出中显示错误也是最快的警报方式

你有两个选择

  • 在开发环境的
    php.ini
    文件中,设置

    error_reporting = E_ALL
    

  • 在代码中

    ini_set('display_errors', 'On');
    error_reporting(E_ALL);
    
  • 这将帮助您跟踪任何意外输出(它确实如此)


    此外,您在客户端错误处理程序中遗漏了重要的信息。回调的签名是

    Function( jqXHR jqXHR, String textStatus, String errorThrown )
    
    你可以通过以下简单的方法获得一些有价值的见解

    console.error(textStatus, errorThrown)
    

    什么是
    alert(result.responseText)
    alert?你能在现实中展示这个吗?什么是桥?网站上传?您是否通过
    头(…)
    在php文件中设置了responsetype?OT:更好的方法:不要像您那样返回状态码,并且总是200 OK。使用http状态码,就像在api中一样。200仅当成功将其添加到购物车时才可以。其他情况下的错误代码。猜测一下,您的响应主体是无效的JSON。您之所以看不到它,是因为您在错误处理程序中忽略了一些重要信息。尝试
    error:function(jqXhr,textStatus,errorhown){alert(textStatus+':'+errorhown)}
    。我打赌你会看到“parsererror”后面跟着一些非常有用的information@suicidebilly另外,在PHP脚本的顶部,设置
    ini_set('display_errors','On');错误报告(E_全部)。这将指出您试图通过未调用响应bodysuccess处理程序中的警告执行数组到字符串转换的位置。所以你的答案不是问题的一部分,也没用。为我工作,将数据类型更改为json。在php文件中,只需回显json。在我的服务器上尝试过。
    res['status']==1
    res.status==1
    在功能上是相同的。就是这样,您的提示对帮助我找到错误非常重要。。。不仅是因为这个问题本身,我还学到了以前从未使用过的东西。再次感谢!
    ini_set('display_errors', 'On');
    error_reporting(E_ALL);
    
    Function( jqXHR jqXHR, String textStatus, String errorThrown )
    
    console.error(textStatus, errorThrown)