【问题标题】:$.ajax.done works on Firefox but not in Chrome$.ajax.done 适用于 Firefox,但不适用于 Chrome
【发布时间】:2015-06-19 19:34:05
【问题描述】:

我有一个使用 jQuery 和 PHP 的非常简单的 AJAX 请求。这是我的代码

var request = $.ajax({
    method: "POST",
    url: "Url.php",
    data: { param: valueParam },
    dataType: "html"
});

request.done(function(html) {
   alert('Hello');
});

该代码在 Firefox 38.0.5 中完美运行,但在 Chrome 43.0.2357.124m 中无法运行。

Chrome 中的问题如下:“Url.php”返回一对名称-值。如果它返回一个不同于 null 的值,则不会显示警报(并且控制台中没有任何错误)。但如果 url 返回 null 值,则会显示警报。我试过 ctrl+F5 还是不行。

在 Firefox 中,这两种情况都很好。

谢谢!

【问题讨论】:

  • 空值是什么意思?字符串null,还是空响应?如果指定dataType: "text" 会怎样?
  • 响应为 {"empresa": value} 如果 value = null(不是字符串),则显示警报。如果值为 != null 则不显示警报。如果我把 dataType="text" 任何改变。
  • 这看起来像 JSON,而不是 HTML。
  • 是的,但是我尝试输入 dataType: "json" 结果是一样的:不起作用。

标签: php jquery ajax google-chrome


【解决方案1】:

fail 函数有返回值吗?

request.done(function( msg ) {
  console.log(msg);
});

request.fail(function( jqXHR, textStatus ) {
  console.log("Request failed: "+textStatus);
});

【讨论】:

  • 不,这不会返回任何东西
【解决方案2】:

问题是当我触发 ajax 请求时。我是在“onchange”(带有jQuery自动完成的输入文本)jQuery事件中做的。当我选择自动完成列表中的一项时,不会在 Chrome 中引发 onchange() 事件(在 Firefox 中是)。

所以我在 jQuery "focusout" 事件中触发 ajax 请求并在 Chrome 和 Firefox 中工作。

【讨论】: