有人可以告诉我如何使用相同的jsonp回调制作3个jsonp跨域请求,这些回调只是获取内容并将其写入页面吗?
我正在尝试构建一个url数组来循环,我想为每个url发出一个jsonp请求。对于每个响应,我想获取该json对象,然后将数据写入页面的一部分。我不在乎它是什么顺序。如果我使用$ .each函数,我不需要考虑范围?因为我只定义了一个回调函数,并且我想覆盖jsonp回调,所以它总是调用相同的函数,但该函数足够聪明,可以知道返回了哪个对象并将其写入页面。
这是我的代码:
$(document).ready(function() {
$.getJSON('/server/webcontent/js/env-urls-local.js', function(data) {
$.each(data.env.urls, function(index, url) {
//alert(url.path);
$.ajax({
url: url.path,
dataType: 'jsonp',
async: false,
cache: false,
done: function(sData, textStatus, jqXHR){
var targetreleasediv = "." + url.target + ' td:nth-child(2)';
var targetdescdiv = "." + url.target + ' td:nth-child(3)';
//alert(targetreleasediv);
//alert(targetdescdiv);
$(targetreleasediv).html(sData.env.v);
$(targetdescdiv).html(sData.env.desc);
},
fail: function(jqXHR, textStatus, errorThrown){
alert("Error " + jqXHR.responseText+ " error thrown is " + errorThrown + " status is " + textStatus);
var targetreleasediv = "." + url.target + ' td:nth-child(2)';
var targetdescdiv = "." + url.target + ' td:nth-child(3)';
//$(targetreleasediv).html("server is currently down");
//$(targetdescdiv).html("server is currently down");
}
});
});
});
});
这是带有urls的json数组:
{
"env":{
"urls":[
{
"path":"http://server.domain.com/server/webcontent/js/evt2_server1.js",
"target":"env2-server"
},
{
"path":"http://server.domain.com/server/webcontent/js/evt2_server2.js",
"target":"env2-server2"
}
]
}
}
这是请求返回的json字符串
{"env":{"v":"Tag_12345","desc":"Test of purpose"}}
现在,当我提交页面时,我得到了json ajax请求,但是没有调用done或fail方法。
答案 0 :(得分:0)
$.each
和$().each
与for
循环的不同之处在于,对于它循环的每个项目,在其上运行的函数都在其自己的范围内。你应该可以在每个jsonp调用中简单地使用相同的回调而不用担心。
答案 1 :(得分:0)
我发现您的代码存在多个问题:
.success
和.error
处理程序。它们应该在ajax调用之前定义。我建议在ajax数据结构中定义它们,以便它们在最初制作时直接传递给ajax函数。jsonpCallback: 'jsonCallback',
选项。根据jQuery ajax doc,最好让jQuery管理该函数名。