【问题标题】:How can I access responseText of a jqXHR object from a successfull AJAX call?如何从成功的 AJAX 调用中访问 jqXHR 对象的 responseText?
【发布时间】:2011-10-17 19:56:54
【问题描述】:

我的 JavaScript 代码中有以下 ajax 调用

url = 'http://news.ycombinator.com/?callback=?';
$.ajax({url:url ,async:!1,dataType:'script', complete:function(result)
                                   {alert(JSON.stringify(result));} 
      });

在警报中打印出以下内容。

{'readyState':4, status:200, statusText:'success'} 

它没有responseText。但是,在chrome控制台中我仍然可以看到ycombinator页面的所有返回HTML数据。我怎样才能访问这个文本?

另一方面,如果我将 url 变量更改为返回有效 json 对象的 url,如下所示,

urll = 'http://gdata.youtube.com/feeds/api/videos?q=basshunter&format=5&max-results=5&v=2&alt=jsonc';
$.ajax({url:urll ,async:!1, complete:function(result)
                                   {alert(JSON.stringify(result));} 
      });

这会按预期返回所有 responseText。

需要注意的一点是,如果我没有像第一种情况那样将 url 指向有效的 JSON 返回 url,我必须提供选项 dataType:'script'(或 JSON)。否则它将引发跨域请求错误。在第二种情况下,即使我没有指定数据类型,它也没有抛出任何跨域错误。

【问题讨论】:

  • responseText 可能继承自对象原型。试试alert(result.responseText)
  • 似乎工作jsfiddle.net/X7WAj
  • 是的,它在 gdata url 的情况下工作,它的主体中有一个有效的 json 对象。但不是第一个 ycombinator url
  • 第一种情况不起作用,因为它不允许跨域ajax调用。
  • 但是,可以对 script 和 jsonp 类型进行跨域调用。所以它在获取内容方面确实有效,这可以在 Chrome 控制台中观察到。它会在数据中引发格式错误。但是我的问题是,我无法在函数调用中访问它

标签: javascript jquery ajax cross-domain xmlhttprequest


【解决方案1】:

将您的 complete 回调替换为 success成功 ajax 请求成功完成时执行的回调。

还在您的数据类型中使用“json”而不是“script” 如果您在 dataType 中使用“脚本”,它将返回 "{\"key\":\"value\"}".

如果您在 dataType 中使用“json”,它将像 {"key":"value"}.

一样返回

【讨论】:

  • 是的,我最初尝试使用 Success,它根本不会显示警报框!!但是我仍然可以在控制台中看到数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多