【问题标题】:How to return an AJAX callback in IE? [duplicate]如何在 IE 中返回 AJAX 回调? [复制]
【发布时间】:2019-01-17 15:15:49
【问题描述】:

我无法访问从 IE11 上的 AJAX 请求检索到的数据。 我正在使用 Jquery 发送 AJAX 请求:

在 Chrome 中,FF 我有一个 responseText 字段,我可以在响应对象中轻松访问该字段。

var ExternalApiService = (function(){
    var getTimeGMT = function(){
        return $.get("{api_path}.php",function(data, textStatus, jqXHR){
            return jqXHR.responseText;
        });
    };
    return{
        getTimeGMT: getTimeGMT
    }
})();

然后,当我打电话时

ExternalApiService.getTimeGMT()

在 Chrome 和 FF 上,我得到响应的对象有一个 responseText 字段,我可以轻松访问该字段。 在 IE11 中我没有那个字段。

然而,在 IE developer tools 中,在 Network 上的 API 调用中,如果我点击右侧 Body = > 响应正文,我可以看到我有我需要的文本。 API 调用有效,但我无法访问响应正文。

我如何访问这些数据?

【问题讨论】:

  • 很难想象这段代码可以在任何浏览器中工作。你将回调函数的结果返回到哪里?您在何时何地查看responseText
  • @Teemu 的意思是,您认为 return data; 语句在做什么/做了什么,您的“它不起作用”是基于什么?
  • "必须有一种方法可以访问 i[sic] 从 AJAX 获得的数据" - 是的,它就在 , function(data) {
  • 这是一个异步问题。这在我不知道的任何浏览器中是如何工作的。要解决问题,您需要正确使用回调,因为我标记的副本向您显示。
  • 我已经编辑了原帖

标签: javascript php jquery ajax internet-explorer


【解决方案1】:

根据the docsresponseTextjqXHR 对象的参数,作为第三个​​ 参数传递给您的成功函数,而不是data 的参数。也就是说,响应数据都在 data 中 - 很少有理由去原始的 jqXHR.responseText 值,因为你已经有了它。

$.get('https://{api_path}.php',function(data, textStatus, jqXHR){
     console.log(jqXHR.responseText);
     return data;
});

如果您在没有正确 CORS 标头的情况下发出跨域请求,则它可能不可用。

【讨论】:

  • 显然它在 Chrome 和 FF 中运行良好”有什么解释吗?
  • @Teemu 如果它在那些浏览器中工作,OP 没有显示他们正在使用的实际代码。根据我的经验,CORS 实现因浏览器而异,OP 代码中的 https:// 进一步表明它可能是跨域请求。我也很好奇 OP 是否查看了他们的错误控制台。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-31
  • 2017-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多