【发布时间】:2013-11-23 12:11:53
【问题描述】:
您好,我正在尝试按照以下说明使用 jQuery 进行 ajax 调用:http://data.hud.gov/housing_counseling.html
但是由于这是一个跨域请求,所以我需要做jsonp(对此不了解)
经过研究,我以两种方式完成了调用,但我不断收到错误消息,数据位于浏览器中的某个位置,但我不知道如何访问它。
注意 url 上的回调参数(如果我不包含它,我会得到 Origin is not allowed by Access-Control-Allow-Origin。)
第一次通话:
function loadJson()
{
var statesurl = "http://data.hud.gov/Housing_Counselor/search?AgencyName=&City=&State=CA&jsoncallback=?"
$.getJSON(statesurl, null, function(result){
}).done(function(result) {
var items = [];
$.each( result, function( key, val ) {
items.push( "<li id='" + key + "'>" + val + "</li>" );
console.log(key + ": " + val)
});
$( "<ul/>", {
"class": "my-new-list",
html: items.join( "" )
}).appendTo( "div#thestates" );
}).fail(function() {
console.log( "error" );
})
}
$( "#loadstates" ).click(function() { loadJson()});
我为 callback 参数获得了一个随机回调名称,例如 http://data.hud.gov/Housing_Counselor/search?AgencyName=&City=&State=CA&jsoncallback=jQuery19107074434771202505_1384407999935&_=1384407999936 通过 Chrome 的控制台,我可以看到响应是带有键值对的 JSON 数据。
如果我尝试使用 $.ajax 调用,$.ajax 调用也会发生同样的情况:
function loadJsonP()
{
var statesurl = "http://data.hud.gov/Housing_Counselor/search?AgencyName=&City=&State=CA&jsoncallback=?"
$.ajax({
url:statesurl,
dataType: 'jsonp', // Notice! JSONP <-- P (lowercase)
success:function(json){
// do stuff with json (in this case an array)
console.log(json_encode(json))
},
error:function(){
console.log("Error");
},
});
}
我得到了与上图类似的响应。虽然 console.log 的输出都是“错误”,但我看到了 200 响应
我应该如何处理响应以获得成功的响应并操作 JSON 数据,这显然是在浏览器的某个地方
谢谢
【问题讨论】:
标签: jquery cross-domain jsonp