【发布时间】: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) -
是的,它在 gdata url 的情况下工作,它的主体中有一个有效的 json 对象。但不是第一个 ycombinator url
-
第一种情况不起作用,因为它不允许跨域ajax调用。
-
但是,可以对 script 和 jsonp 类型进行跨域调用。所以它在获取内容方面确实有效,这可以在 Chrome 控制台中观察到。它会在数据中引发格式错误。但是我的问题是,我无法在函数调用中访问它
标签: javascript jquery ajax cross-domain xmlhttprequest