等待$ .post完成

时间:2011-06-03 18:09:20

标签: javascript jquery ajax post

看来我的脚本不想等待$ .post调用完成。这是一个问题。这是一些伪代码:

<script type="text/javascript" language="javascript">
$(document).ready(function(){
  // Global var, to be used everywhere in the ready scope 
  // Note its default value!    
  var test = false;
  $.post('test.php',{},function(result){
   if(result=='yes')
   {
    // This gets executed!
    alert('Its true! Hurraaay!');
    test = true;
   }
   else
   {
    test = false;
   }
  }

  if(test==false)
  {
   // THIS gets executed, despite the fact that we set test to true!
   alert('Awww....');
  }
  // it reaches this, showing us that there was no error!
  alert('Im alive!!!');
  // and a whoooole bunch of other code here...
}
</script>

在没有挂起浏览器的情况下,在继续之前确保我的Post通话完成的最佳方法是什么?希望有一些不太乱的东西。 :)

5 个答案:

答案 0 :(得分:4)

没有太麻烦正在使用回调。

只需在.post()调用之外创建一些函数,并在您认为合适时在.post()内调用它。您可以以非常灵活的方式进行多次回调并在AJAX调用中使用它们。

在您的情况下,由于您只拨打alert(),因此无需创建其他功能 - 只需在alert()电话内拨打.post()即可。如果您的代码变大,请考虑创建单独的函数。

这是JavaScript和异步调用的工作方式。习惯它,并使用它的力量编写非常干净和可维护的代码。

答案 1 :(得分:2)

<script type="text/javascript" language="javascript">
$(document).ready(function(){
  // Global var, to be used everywhere in the ready scope 
  // Note its default value!    
  var test = false;
  $.post('test.php',{},function(result){
   if(result=='yes')
   {
    // This gets executed!
    alert('Its true! Hurraaay!');
    test = true;
  // it reaches this, showing us that there was no error!
  alert('Im alive!!!');
  // and a whoooole bunch of other code here...

   }
   else
   {
    test = false;
   // THIS gets executed, despite the fact that we set test to true!
   alert('Awww....');

   }
  }
}
</script>

答案 2 :(得分:0)

是的,它不会等待。看到这里:

http://fixingthesejquery.com/images/ajax101.png

在这里:

http://fixingthesejquery.com

答案 3 :(得分:0)

太乱了?如果你缩进多个空格,一切都更具可读性,仍然可以正常工作。

var test = false; // NOW it's global

// Just so we can use the method again
function postSomething() {
  $.post('test.php', {}, function(result) {
    if(result === 'yes') {
      alert('Its true! Hurraaay!');
      test = true;
      alert('Im alive!!!');
    } else {
      test = false;
      alert('Awww....');
    }
  });
}

$(document).ready(function() {
  postSomething();
});

虽然很可怕。

答案 4 :(得分:0)

JQuery .post()方法异步连接到您的服务器脚本。您可以使用回调功能,以便程序在从脚本返回响应后使用数据。

在调用post后,不要尝试同步处理数据,而是在收到响应时处理数据。利用函数使代码更具可读性。

$(function() {
    postTest();
});

function postTest() {
    $.post(
        'test.php',
        {},
        function(response) {
            if(response == 'yes') {
                testSuccess();
            } else {
                testFailure();
            }
        }
    ); 
}

function testSuccess() {
    alert("Success");
}

function testFailure() {
    alert("Failure");
}