为什么我的 ajax 成功回调函数没有按预期工作?

时间:2021-03-21 08:00:01

标签: javascript jquery ajax

我对这个ajax请求进行了编码,但不知道为什么success方法中的代码不起作用

即使在chrome浏览器的网络中出现状态:200ok

img

这是ajax代码:

$("#noti_filter").click(function(){
  //first add item into cart
  var item_id = 'test';
  $.ajax({
    method:"POST",
    //contentType:"application/json",
    url:"../html/notifies.php",
    data:{product_id:item_id},
    dataType: "json",
    success:function(data,state) {
      console.log(data);
      console.log(state);
      alert('ajax success');
    }
  });
});

问题在于警报或控制台更不用说其他代码

  success:function(data,state)
  {
    console.log(data);
    console.log(state);
    alert('ajax success');

  }

2 个答案:

答案 0 :(得分:2)

来自 ajax events 文档:

<块引用>

成功(本地事件)

只有在请求成功(服务器没有错误,数据没有错误)时才会调用此事件。

由于您的服务器以 200 OK 响应,这意味着我们可以解决服务器的问题并留下数据错误。

来自 ajax 文档(仅相关部分):

<块引用>

数据类型

您期望从服务器返回的数据类型。

可用的类型(以及作为第一个参数传递给成功回调的结果)是:

"json":将响应计算为 JSON 并返回一个 JavaScript 对象。 ... JSON 数据以严格的方式解析;任何格式错误的 JSON 都会被拒绝并引发解析错误。从 jQuery 1.9 开始,空响应也会被拒绝;服务器应改为返回 null 或 {} 响应。 (有关正确的 JSON 格式的更多信息,请参阅 json.org。)

所以很可能服务器返回的数据被ajax拒绝,在这种情况下应该抛出解析错误。

这是一个如何实现错误处理程序的示例:

$("#noti_filter").click(function(){
    //first add item into cart
    var item_id = 'test';

    $.ajax({
       method:"POST",
       //contentType:"application/json",
       url:"../html/notifies.php",
       data:{product_id:item_id},
       dataType: "json",
       success: function(data,state) {
           console.log(data);
           console.log(state);
           alert('ajax success');
       },
       error: function(err) {
           console.log(err.responseText);   // <-- printing error message to console
       }
    });
});

答案 1 :(得分:1)

您将数据类型定义为 jsondataType 是您期望从服务器返回的数据类型。您的服务器是否响应 json

我假设您的 200-ok-server-request 的结果可能不是 json 格式,因此解析失败并且您的 success-callback 未被调用。您可以使用 error 回调函数捕获错误。 之后你就知道确切的原因了。

相关问题