jQuery:if语句中的$ .ajax总是调用(不应该!)

时间:2011-10-05 08:31:04

标签: jquery ajax if-statement

大家早上好


编辑:抱歉书面错误!这个想法是展示一个最小的例子,我在这里专门给它倾斜。但主要观点应该是可以理解的。

我还尝试将“外部”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语句的末尾(我得到“if语句的结尾”-alert)和脚本调用ajax的AFTERWARDS(但它不应该)。在“if语句结束”警告之后,我得到了“内部ajax”-alert。

我根本找不到解决方案或问题。有一些提示吗? :)拜托。

非常感谢!

1 个答案:

答案 0 :(得分:0)

你在一行上有一个if语句,在下一行有一个左大括号。我认为你在这里遇到了JavaScript最邪恶的“功能”:automatic semicolon insertion

基本上,你有

if ( x == 'doit' )
{
    // code
}

但它被解析为

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

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

故事的寓意是要非常小心你在JavaScript代码中引入换行符的位置,因为语言希望尽可能将行尾作为语句结束处理。