Javascript 未在for循环中执行Jquery Ajax调用
使用此函数Javascript 未在for循环中执行Jquery Ajax调用,javascript,jquery,ajax,for-loop,Javascript,Jquery,Ajax,For Loop,使用此函数 function readPinMode(callback,pin){ $.ajax({ type: 'GET', url: path, data: { 'funct': "readPinMode", //function included and working ou of loops 'pin': pin, 'php': 0 }, success: f
function readPinMode(callback,pin){
$.ajax({
type: 'GET',
url: path,
data: {
'funct': "readPinMode", //function included and working ou of loops
'pin': pin,
'php': 0
},
success: function (result) {
//console.log(result);
callback(result);
},
error: function (xhr, textStatus, error) {
console.log(xhr);
console.log(textStatus);
console.log(error);
}
});
};
这样,我们就不会无所事事:
$( document ).ready(function() {
<?php
$js_array = json_encode($GLOBALS['gpio']); // got from included file, working
echo "var pins = ". $js_array . ";\n";
?>
console.log( "Document ready." );
for (i = 0; i < pins.length; i++) {
var mode = "m" + pins[i];
function initMode(){
readPinMode(function(ret){
console.log(ret);
$(mode).text(ret);
console.log(mode);
}, pins[i]);
};
}
$(文档).ready(函数(){
console.log(“文档准备就绪”);
对于(i=0;i
它进入for循环(我可以登录控制台模式
和引脚[I]
,它们正在工作),但函数似乎没有被调用。
控制台不显示任何内容
有办法解决这个问题吗?
谢谢我认为它的语法错误,请尝试此代码
console.log( "Document ready." );
for (i = 0; i < pins.length; i++) {
var mode = "m" + pins[i];
readPinMode(function(ret){
console.log(ret);
$(mode).text(ret);
console.log(mode);
}, pins[i]);
}
console.log(“文档准备就绪”);
对于(i=0;i
我删除了函数initMode()因为它一次又一次地创建了相同的函数定义,覆盖了现有函数,而且它非常混乱。您不应该在循环中定义函数,因为最终函数将是最后一个循环的函数。在这种情况下,您也不需要在循环中定义函数
这里有一个我建议不要使用真正的循环,它需要一个适当的闭包,而是在成功中再次运行
<?php
$js_array = json_encode($GLOBALS['gpio']); // got from included file, working
echo "var pins = ". $js_array . ";\n";
?>
var cnt = 0;
function readPinMode(){
if (cnt>=pins.length) return;
$.ajax({
type: 'GET',
url: path,
data: {
'funct': "readPinMode", //function included and working ou of loops
'pin': pins[cnt],
'php': 0
},
success: function (result) {
//console.log(result);
$("#mode").append(result)
cnt++;
readPinMode();
},
error: function (xhr, textStatus, error) {
console.log(xhr);
console.log(textStatus);
console.log(error);
}
});
}
$(function() { readPinMode(); });
var-cnt=0;
函数readPinMode(){
如果(cnt>=管脚长度)返回;
$.ajax({
键入:“GET”,
url:path,
数据:{
'funct':“readPinMode”,//包含的函数和循环的工作ou
“pin”:pins[cnt],
“php”:0
},
成功:功能(结果){
//控制台日志(结果);
$(“#模式”).append(结果)
cnt++;
readPinMode();
},
错误:函数(xhr、textStatus、error){
console.log(xhr);
console.log(textStatus);
console.log(错误);
}
});
}
$(函数(){readPinMode();});
概念证明:
var pins=[“pin1”、“pin2”、“pin3”];
var-cnt=0;
函数readPinMode(){
如果(cnt>=管脚长度)返回;
document.write('
pin:'+pins[cnt]);//您的Ajax
cnt++;
readPinMode();
}
$(函数(){
readPinMode();
});
使用回调函数没有错,但是您确实错过了几件事。您忘记调用您的initMode
函数,mode
应该是您提到的ID:
<script>
function readPinMode(callback, pin) {
$.ajax({
type: 'GET',
url: 'SGWEB/header.php',
data: {
'funct': "readPinMode", //function included and working ou of loops
'pin': pin,
'php': 0
},
success: function (result) {
callback(result);
},
error: function (xhr, textStatus, error) {
console.log(error);
}
});
}
function initMode(mode, pin) {
readPinMode(function (ret) {
$(mode).text(ret);
}, pin);
}
$(document).ready(function () {
var pins = <?= json_encode($GLOBALS['gpio']) ?>;
for (i = 0; i < pins.length; i++) {
var mode = "#m" + pins[i];
initMode(mode, pins[i]);
}
});
</script>
函数readPinMode(回调,pin){
$.ajax({
键入:“GET”,
url:'SGWEB/header.php',
数据:{
'funct':“readPinMode”,//包含的函数和循环的工作ou
“pin”:pin,
“php”:0
},
成功:功能(结果){
回调(结果);
},
错误:函数(xhr、textStatus、error){
console.log(错误);
}
});
}
功能初始化模式(模式,引脚){
readPinMode(功能(ret){
$(模式)。文本(ret);
},pin);
}
$(文档).ready(函数(){
var引脚=;
对于(i=0;i
这里是我创建的一个示例,您可以看到它是如何工作的。不要在循环中使用ajax。
ret
是ajax成功方法的结果,即函数initMode()
do there??您只是定义了一个函数,而不是执行它..因为它具有调用AJAX并接收结果的逻辑首先,在i之前添加var。您不需要该函数initMode(){},它只是在循环内部声明函数,什么也没发生。mode
假设是什么?它是HTML元素ID吗?确切地说,pins是什么?告诉我你有多喜欢它;)不错的方法,但这只适用于第一个元素!我非常喜欢它,以至于+1:)@Ghesio-我需要更多关于它只适用于第一个元素的细节。脚本停止了吗?有控制台消息吗?pins数组的呈现效果如何?请看概念证明。我在pin中有一个输入错误/pins@mplungjan脚本得到了exe剪切后,数组很好。它只记录数组的第一个元素(console.log(result);
from ajax)并且在控制台中没有其他错误。尝试了这段代码,它只适用于控制台中得到的内容的最后一次迭代??我只得到最后一次console.log(result);
from forloop@Ghesio代码按预期100%运行。它正确循环,控制台有所有循环的输出。检查此小提琴。现在它有一个正确的闭合。+1