【发布时间】:2011-12-15 07:41:15
【问题描述】:
有人可以告诉我如何使用相同的 jsonp 回调创建 3 个 jsonp 跨域请求,这些回调只是获取内容并将其写入页面?
我正在尝试构建一个 url 数组来循环遍历,我想为每个 url 触发一个 jsonp 请求。对于每个响应,我想获取该 json 对象,然后将数据写入页面的一部分。我不在乎它的顺序。如果我使用 $.each 函数,我不需要考虑范围吗?因为我只定义了 1 个回调函数,并且我想覆盖 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");
}
});
});
});
});
这是带有 url 的 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 方法。
【问题讨论】:
-
目前还不清楚是什么问题。您是否尝试过使用一个回调函数并看到需要帮助解决的问题?如果是,请描述您希望帮助解决的问题。否则,我们需要查看您的代码并更好地描述问题所在才能知道如何提供帮助。
-
@jfriend00 我添加了上面的代码。基本上我循环遍历 json 数组获取 url,然后触发跨域 jsonp 请求。我有一个奇怪的行为。我刷新页面 10 次,它有时有效,有时无效。当 json 数组只有 1 个 url 时,它也可以 100% 工作。当我添加 2 时,它变得很奇怪。此外,如果请求失败,它们都会失败。有什么想法吗?
标签: jquery ajax cross-domain jsonp