我正在进行电子商务,我实施了一个AJAX请求,以便在购物车中添加和删除商品。每次jQuery执行一切正常,它总是返回 200 OK ,但错误事件被触发而不是成功。
这就是它的工作方式:
每当用户点击“添加到购物车”按钮时,Jquery将检查此项是否可用,然后将INSERT,ADD或Return Error:
jQUERY CODE
$.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)
## 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));
每次执行代码时,一切都按预期工作,项目被添加到购物车,所有INSERTS和UPDATES都完成,它总是返回200 OK BUT 错误事件被触发成功。
重要事项/////////////////////////////////////////// ////////////////////////////////////////////////// //////////////////////////////////////////////
字符串 $ status 和 $ status_txt (addCart.php)永远不会返回空值,它们总是返回一个整数和一条短信。要避免空值(“”)解析错误。
我已经尝过但但没有工作的事情://///////////////////////////////// ///////////////////////////////////////
我已经设法解决了我的问题。我使用了Javascript substr(),在错误 responseText 时获取状态编号,然后对Ajax错误事件进行了所有验证:
JAVASCRIPT WORKAROUND
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):
status = result.responseText.substr(10, 1);
我知道这不是解决这个问题的正确方法,这就是为什么我要修复这个让我疯狂的错误......
我做错了什么?我已经多次使用过这段代码了,之前我从来没有遇到过这个问题,我在StackOverflow上看过很多类似的问题但是没有一个能为我工作......
感谢任何帮助!
答案 0 :(得分:1)
您的JSON响应正文无效。这可以在your comment ...
中看到我得到
Array{"status":1,"alert":"Product Inserted"}
“Array”前缀无效,通常是PHP echo
JSON之前的意外数组到字符串转换的指示符。例如
echo [1,2,3]; // Notice: Array to string conversion in ...
开发时,您应始终运行PHP,并将错误报告设置为最高级别。在输出中显示错误也是提醒的最快方式。
你有两个选择......
在您的开发环境的php.ini
文件中,设置
error_reporting = E_ALL
和
display_errors = On
在您的代码中
ini_set('display_errors', 'On');
error_reporting(E_ALL);
这可以帮助您追踪任何意外输出(它确实如此)。
此外,您错过了客户端错误处理程序中的重要信息。回调的签名是
Function( jqXHR jqXHR, String textStatus, String errorThrown )
您可以通过简单的
获得一些有价值的见解console.error(textStatus, errorThrown)
答案 1 :(得分:-3)
为我工作
<强> addCart.php 强>
<?php
// your inserts and checking here.
$str = json_encode(array("status" => $status, "alert" => $status_txt));
echo $str;
并在AJAX请求中
$.ajax({
url: 'ajax/addCart.php',
type: 'POST',
data: { id: id, color: color },
dataType: 'json',
success: function(res){
console.log(res['status']);
if (res['status'] == 1) {
console.log('nice');
}
},
error: function(s) {
console.log(s.responseText);
}
});