我正在尝试向多个服务器发送一个帖子请求(可能的坦克到CORS)。 要做到这一点,我有一个带有jQuery帖子的数组,并为完成的个人注册相同的回调函数,如下所示:
var requestUrls = getRequestUrlArrayFromForm();
var companyNames = getCompanyNamesArrayFromForm();
cleanTable();
for(var i = 0; i < requestUrls.length; i++) {
postings.push($.post(requestUrls[i],
someXmlString
));
postings[i].done(function( response , textStatus, jqXHR) {
console.log(i); // the number printed here is always the same even for requestUrls.length > 1
addToTable(companyNames[i], response);
}).fail(function( jqXHR ) {
// do something
});
}
我现在的问题是我想要记住与每个帖子相关的一些数据,例如在这个例子中是一个companyName。但是在帖子的成功功能中,我不知道我的n-post请求中的哪一个,因此无法知道正确的索引确实在我的companyName数组中访问正确的值。好吧,我猜它是因为ajax的异步行为。但无论如何,这个问题应该可以解决。
那么是否可以将一些数据传递给post对象,而post对象不会被发送到服务器但只是被客户端记住并且可以在done函数回调中访问?
提前致谢。
答案 0 :(得分:1)
你需要的方式是这样的
var requestUrls = getRequestUrlArrayFromForm();
var companyNames = getCompanyNamesArrayFromForm();
cleanTable();
var postings = [];
for (var i = 0; i < requestUrls.length; i++) {
postings.push($.post(requestUrls[i], someXmlString));
}
$.when.apply($, postings).done(function () {
for (var i in arguments) {
addToTable(companyNames[i], arguments[i][0]); // the response
}
});
根据OP评论,更新回答
var requestUrls = getRequestUrlArrayFromForm();
var companyNames = getCompanyNamesArrayFromForm();
cleanTable();
for (var i = 0; i < requestUrls.length; i++) {
(function (i) {
$.post(requestUrls[i], someXmlString).done(function (resp) {
addToTable(companyNames[i], resp);
});
})(i);
}
你需要用封口包裹它。
答案 1 :(得分:0)
这样的事情怎么样?
var requestUrls = getRequestUrlArrayFromForm();
var companyNames = getCompanyNamesArrayFromForm();
cleanTable();
for(var i = 0; i < requestUrls.length; i++) {
$.post( requestUrls[i], someXmlString)
.done(function(response , textStatus, jqXHR) {
addToTable(companyNames[i], response);
})
.fail(function( jqXHR ) {
// do something
});
}
答案 2 :(得分:0)
也许包装函数会有所帮助:
var requestUrls = getRequestUrlArrayFromForm();
var companyNames = getCompanyNamesArrayFromForm();
cleanTable();
for(var i = 0; i < requestUrls.length; i++) {
postings.push($.post(requestUrls[i],
someXmlString
));
postings[i].done((function(j){
return function( response , textStatus, jqXHR ) {
console.log(j);
addToTable(companyNames[j], response);
}
})(i)).fail(function( jqXHR ) {
// do something
});
}