2012-10-14 24 views
1

我有一段jQuery代码:等待AJAX​​请求,然后整理了jQuery

var newData = checkCP(somedata); 
if(newData=="hi"){ 
    alert("Welcom"); 
} 

function checkCP(jsData){ 

    $.ajax({ 
     type: "POST", 
     url: "Process.php", 
     data: jsData, 
     dataType: "json", 
     success: function(data){ 
      if(data.match==1) 
       return "hi";  
      else 
       return "bye"; 
     } 
    }); 
} 

我不知道为什么欢迎警报一直没有出现。我检查了一切; PHP文件返回1,但在等候AJAX响应显然之前它通过

if(new=="hi"){ 
    alert("Welcom"); 
} 

有没有办法等待AJAX​​响应,然后读码的休息jQuery的?

+1

的样子,你的''new''拥有看起来像是''if''一样的,所以它是一种语言文字,不要用它作为变量... 你能告诉data.match有什么吗? – doniyor

+0

感谢您的评论,但我只是通过使用async找到了答案。 – user1725155

回答

3

是的,您可以将$ .ajax()中的'async'选项设置为false。

$.ajax({ 
      type: "POST", 
      async: false, 
      url: "Process.php", 
      data: jsData, 
      dataType: "json", 
      success: function(data){ 
       if(data.match==1) 
       return "hi"; 
      else 
       return "bye"; 
      } 
+0

是的,它的工作原理......谢谢 – user1725155

2

首先,请不要使用'new'作为变量名称。 '新'已经意味着什么。

现在到实际问题...

当你调用checkCP jQuery不会阿贾克斯成功后自动等待execuiting成功函数之前的响应

。事情是,成功函数是一个独立的函数,并从该函数返回值不会从checkCP返回任何东西。 checkCP返回null。

作为证明尝试在你的成功函数中粘贴警告。

像这样的东西应该做的伎俩:

function deal_with_checkCP_result(result) 
{ 
    if(result=="hi"){ 
    alert("Welcom"); 
    } 
} 

function checkCP(jsData,callback){ 

     $.ajax({ 
      type: "POST", 
      url: "Process.php", 
      data: jsData, 
      dataType: "json", 
      success: function(data){ 
       if(data.match==1) 
       callback("hi"); 
      else 
       callback("bye"); 
      } 
     }); 

    } 

通deal_with_checkCP_result回调