Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery:$.ajax-inside-if语句一直被调用(不应该!)_Jquery_Ajax_If Statement - Fatal编程技术网

jQuery:$.ajax-inside-if语句一直被调用(不应该!)

jQuery:$.ajax-inside-if语句一直被调用(不应该!),jquery,ajax,if-statement,Jquery,Ajax,If Statement,大家早上好 编辑:对于书写错误,我很抱歉!这个想法是为了展示一个最小的例子,我在这里特别介绍了它。但其主要思想应该是可以理解的 我还尝试将“外部”ajax结果存储到一个数组中。这很好,但问题是一样的。我想问题在于异步处理不同的ajax调用。正因为如此,我得到的结果有时是“两次”,而不是两个不同的结果,而且我得到结果太晚了 我想我必须使用队列或者类似的东西。 我的jQuery脚本有问题。最小值如下所示: // - First call "outer" .ajax $.ajax({ type:

大家早上好


编辑:对于书写错误,我很抱歉!这个想法是为了展示一个最小的例子,我在这里特别介绍了它。但其主要思想应该是可以理解的

我还尝试将“外部”ajax结果存储到一个数组中。这很好,但问题是一样的。我想问题在于异步处理不同的ajax调用。正因为如此,我得到的结果有时是“两次”,而不是两个不同的结果,而且我得到结果太晚了

我想我必须使用队列或者类似的东西。 我的jQuery脚本有问题。最小值如下所示:

// - First call "outer" .ajax
$.ajax({
  type: "GET", url: "FILE.xml", dataType: "xml",
  success: function( outerxml ) {

    $( outerxml ).find("content").each( function() {

      var x = $(this).attr('id'); // - Get id attribute
      if ( x == 'doit' )
      {
        $.ajax({
          type: "GET", url: "FILE.xml", dataType: "xml",
          success: function( innerxml ) {
             alert("inner ajax");
             ...
          } // - End of inner success
        }); // - End of inner .ajax
      }
      alert("end of if statement");

    }); // - End .find("content")

  } // - End outer success
}); // - End outer .ajax
请注意,if条件为“false”(x!=“doit”)。问题是脚本运行到if语句的末尾(我得到了“end of if statement”-alert),然后脚本调用ajax(但它不应该)。我在“if语句结束”警报之后得到“内部ajax”警报

我根本找不到解决问题的办法。有什么提示吗?:)求你了


非常感谢

一行是
if
语句,下一行是大括号。我认为您在这里遇到了JavaScript最邪恶的“功能”:

基本上,你有

if ( x == 'doit' )
{
    // code
}
但它被解析为

if (x == 'doit'); // <-- note semicolon inserted here

// Now this block is logically disconnected from the if statement
{
    // code
}

if(x=='doit');//对象内部的
type=“GET”
是什么?在这两种情况下都应该是
类型:“GET”
。此外,此处缺少括号
})/-End.find(“content”)
。此外,我不确定
成功
回调中绑定了什么
。在调用第一个
$.ajax
之前,最好将
$(this)
存储在变量中。如果收到“内部ajax”警报,则会发送ajax请求。因此,对于
find(“content”)
列表中的某些项,
x=='doit'
必须为true。您好,能否显示您正在
获取的
文件.xml
的内容?至于您对
alert
s的顺序的评论:我很确定这是预期的行为,因为ajax调用是异步执行的。因此,我的猜测是:xml文件中的第一个
节点确实具有“doit”id,这会发生:1)执行ajax调用,2)触发“if语句结束”警报,3)响应到达并调用success函数,从而产生“内部ajax”警报。但可以肯定的是。。。我们必须看到XML:)