【问题标题】:Ajax done() or success callbacks not firing in wordpressAjax done() 或成功回调未在 wordpress 中触发
【发布时间】:2019-07-02 09:27:57
【问题描述】:

我正在使用 Ajax 调用发出 POST 请求,然后调用 API。然后返回结果。我最初使用的是触发的成功回调,但由于某种原因它停止工作,我读到它已被替换为完成,所以我尝试更改它。我不知道为什么,但是现在完成和成功都不会触发。我最近更新了浏览器,所以也许这与它有关。我也在 Wordpress 中运行它。在网络选项卡中返回 200,状态和消息编码为 JSON。 jQuery 版本是 1.12.4。尽管 Ajax 调用完成,但控制台中没有任何记录,并且对话框没有打开。我怎样才能让它工作?

$.ajax({
  type: 'POST',
  dataType: 'json',
  url: ajax_object.ajax_url,
  data: {
    'action': $action,
    'product_id': $product_id,
  },
  success: function(data) {
    console.log(data.message);
    $( "#dialog" ).text(data.message);
    $( "#dialog" ).dialog( "option", "title", "API - " + data.status );
    $( "#dialog" ).dialog("open");
  }
  });

$.ajax({
  type: 'POST',
  dataType: 'json',
  url: ajax_object.ajax_url,
  data: {
    'action': $action,
    'product_id': $product_id,
  }
}).done(function(result) {
    console.log(result.message);
    $( "#dialog" ).text(result.message);
    $( "#dialog" ).dialog( "option", "title", "API - " + result.status );
    $( "#dialog" ).dialog("open");
  });

【问题讨论】:

  • 错误日志说明了什么?错误:函数(jqXHR,textStatus,错误){ console.log(jqXHR,textStatus,错误)}

标签: jquery ajax wordpress callback


【解决方案1】:

从您的 jQuery 中删除 dataType 参数,AJAX 在触发 .done() 之前使用的 JSON 转换失败,因为 API 中的 JSON 中缺少某些内容/错误。您可以通过在 .done() 之后添加 .fail() 来检查它,您将看到它是如何触发错误的。

$.ajax({}).done().fail(error => console.log(error) 

jQuery.ajax 尝试根据 指定dataType参数或发送的Content-Type头 服务器。如果转换失败(例如,如果 JSON/XML 无效),则 错误回调被触发。

Ajax request returns 200 OK, but an error event is fired instead of success

【讨论】:

  • 谢谢,消息前会显示一些其他文本。这是一些调试信息,我没有意识到这会影响响应。当我删除它时,它又开始工作了
猜你喜欢
  • 2014-11-22
  • 2013-09-14
  • 2012-05-04
  • 2013-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-26
  • 1970-01-01
相关资源
最近更新 更多