使用的API时,我需要第一反应之一旁边,以便服务于新的一页的第二反应。 我现在面临的问题是,我的变量$ X总是设置无论最后#是在循环,即103在这种特殊情况下。 这里是我的代码:
$.ajax({
dataType: 'text',
type: 'post',
url: 'getAllMessages.php',
success: function(responseData) {
var newString = responseData;
var newerString = newString.substring(0, newString.length - 1);
$newObject = jQuery.parseJSON(newerString);
//console.log($newObject);
for($x = 0; $x < $newObject.messages.length; $x++){
$.ajax({
data: {clientFolderId: $newObject.messages[$x].clientFolderId, messageId: $newObject.messages[$x].messageId},
dataType: 'text',
type: 'post',
url: 'testapi.php',
success: function(responseData2){
//alert($x);
var newString2 = responseData2;
var newerString2 = newString2.substring(0, newString2.length - 1);
$newObject2 = jQuery.parseJSON(newerString2);
if($newObject2.statistics.delivered > 1000){
console.log($newObject.messages[$x]);
console.log($newObject2);
}
},
error: function(responseData2){
alert('failure in testapi.php');
}
});
}
},
error: function(responseData) {
alert('failure in getAllMessages.php');
}
});
我的直觉说,中嵌套另一个功能范围Ajax调用(修正感谢马特)将解决意外的行为。 我被这个已经刻录在环打破创建对象; 工程展开
同样在此,例如#5: http://www.javascriptkit.com/javatutors/closures2.shtml
继工程师给出的格局,
for($x = 0; $x < $newObject.messages.length; $x++){
(function($x) {
$.ajax({
data: {clientFolderId: $newObject.messages[$x].clientFolderId, messageId: $newObject.messages[$x].messageId},
dataType: 'text',
type: 'post',
url: 'testapi.php',
success: function(responseData2){
alert($x);
var newString2 = responseData2;
var newerString2 = newString2.substring(0, newString2.length - 1);
$newObject2 = jQuery.parseJSON(newerString2);
if($newObject2.statistics.delivered > 1000){
console.log($newObject.messages[1]);
console.log($newObject2);
}
},
error: function(responseData2){
alert('failure in testapi.php');
}
});
})($x);
}
什么您遇到的关闭。 当循环旋转轮,对于价值$x
被更新。 然而,当AJAX功能来抓住它 - 它使用的参考。 所以,当你发现,你结束了最后一个值。
尝试和思考更多的功能? 你想做什么? 比方说,你想postMessage
-包裹在一个函数并传递消息中。
您的代码将变得更易于阅读,你不会得到你的变量错位。
我正要扔了一些代码,但发现了一些我想澄清-你正在使用的指数在这两个循环,以获得从消息阵列中的单个消息,但职, testapi.php
似乎是工作在单一信息? 未达到预期效果是什么样的反应呢?
更新:创建的jsfiddle到演示问题
在这里,你去这里的一些代码来帮助你。
function correctOutputPlox(id) {
setTimeout(function() {
$("#output").append("<li>" + id + "</li>");
}, 500);
}
function runNicely() {
// same loop...
for (var x = 0; x < 10; x++) {
// but rather than use 'x' (which is going to change, we pass it's value into a function which doesn't have access to the original 'x' since it's in a different lexical scope.
correctOutputPlox(x);
}
}
function showProblem() {
for (var x = 0; x < 10; x++) {
setTimeout(function() {
$("#output").append("<li>" + x + "</li>");
}, 500);
}
}
showProblem();
runNicely();
文章来源: How do I pass a variable inside of an ajax call which is inside of a for loop (javascript)?