2012-03-02 116 views
3

问候语s​​tackoverflow社区。我是一个很长时间的潜伏者,第一次海报。我花了好几个小时来研究,试图克服下面的问题,显然没有成功,因为我在这里发布。应该指出的是,我只用jQuery(或任何JS)编写了几个月的代码。我的目标是:用.ajax()提交一个简单的表单,然后提醒(成功!)并返回true(重新加载页面),如果返回的成功数据=='成功',或填充一个div带有错误消息,否则返回false。从jQuery .ajax()评估成功数据并根据结果返回true/false

我已经尝试了许多不同的方法,在我的研究中发现,但不管我尝试过什么,我都可以获得成功的评估:数据返回true。

这里是我的最新尝试:

$(document).ready(function() { 

    $('#error').hide(); 

    $("#submit_result").submit(function() { 
     var postString = $('#submit_result').formSerialize(); /* Function from jQuery.form.js */ 
     $.ajax({ 
      url: 'inc/submit_speedtest.inc.php', 
      type:'POST', 
      data:postString, 
      success: function(msg) { 
       $('#error').html(msg); 
      }, 
      error:function() { 
       $('#error').html('Error validating CLid!'); 
      } 
     }); 
     if ($('#error').html() == 'Success') { 
      alert('Done'); 
      return true; 
     } 
     $('#error').show(); 
     return false; 
    }); 
}); 

一切都很正常,除了:

if ($('#error').html() == 'Success') { 
alert('Done'); 
return true; 
} 

该测试从不计算为true。我已经尝试了很多不同的方式,包括像submit_speedtest.inc.php的

if $("#error:contains('Success')") { 

内容:

<?php 

session_start(); 

include('lib.inc.php'); 
restrict_unauthorized(); 

if(!empty($_POST['clid'])) { 
    $clid = trim($_POST['clid']); 
    $result = check_clid($clid); 
    echo $result; 
}else{ 
    echo "No CLid!"; 
} 

?> 

的check_clid()函数运行一个简单的MySQL查询,以确保CLID存在。如上所述,这似乎工作正常

我希望这一切都有道理,我非常感谢任何帮助的stackoverflow社区可以提供给我。

编辑

谢谢两位您的输入。我能够从你的回答中收集有用的信息。你让我更好地理解了回调如何工作。

这里是jQuery代码我结束了:

$(document).ready(function() { 

    $('#status_msg').hide(); 

    $("#submit_result").submit(function(e){ 
     e.preventDefault(); 
     var postString = $('#submit_result').formSerialize(); 
     $.ajax({ 
      url: 'inc/submit_speedtest.inc.php', 
      type:'POST', 
      data:postString, 
      success:function(msg) { 
       $('#status_msg').html(msg); 
       $('#status_msg').show(); 
      }, 
      error:function() { 
       $('#status_msg').html('<font color="red">Error validating CLid!</font>'); 
       $('#status_msg').show(); 
      } 
     }); 
    }); 
}); 

PHP所从事的工作的休息,这一切工作正常。

再次感谢。

回答

1

$ ajax是异步的,因此你不能返回任何东西,你应该以不同的方式组织你的代码。

 $("#submit_result").submit(function(e){ 
    e.preventDefault(); 
    var postString = $('#submit_result').formSerialize();  
    $.ajax({ 
     url: 'inc/submit_speedtest.inc.php', 
     type:'POST', 
     data:postString, 
     success: function(msg) { 
      $('#error').html(msg); 
      alert('Done'); 
      $('#error').show(); 
      //do whatyou need to do after you have succesfully vompleted the ajax request 
     }, 
     error:function() { 
      $('#error').html('Error validating CLid!'); 
      $('#error').show(); 
     } 
    }); 

}); 

在你的代码

if $("#error:contains('Success')") 

,因为它执行了ajax函数被调用后,无需等待函数来完成将永远是假的。你可以设置async属性false$.ajax()通话拨打电话同步的,但违抗AJAX

0

你成功和错误回调的实用程序无法运行前,您提交已经完成。

你应该做的,它只是返回false在提交回调,然后做你的逻辑的其余部分从Ajax请求适当的回调:

$("#submit_result").submit(function() { 
    var postString = $('#submit_result').formSerialize(); /* Function from jQuery.form.js */ 
    $.ajax({ 
     url: 'inc/submit_speedtest.inc.php', 
     type:'POST', 
     data:postString, 
     success: function(msg) { 
      // call submit directly on the form 
      $("#submit_result")[0].submit(); 
     }, 
     error:function() { 
      // display error message 
      $('#error').html('Error validating CLid!').show(); 
     } 
    }); 
    // return false to stop the submit 
    return false; 
});