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