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