从jQuery .ajax()评估成功数据,并根据结果返回true / false

时间:2012-03-02 15:38:49

标签: ajax jquery

问候stackoverflow社区。我是一个很长时间的潜伏者,也是第一次海报。我花了几个小时做研究试图克服以下问题,显然没有成功,因为我在这里发布。应该注意的是,我只用了几个月的jQuery(或任何JS)进行编码。

我的目标是:使用.ajax()提交一个简单的表单,然后提醒(成功!)并返回true(重新加载页面),如果返回的成功数据=='成功',或填充div错误消息,否则返回false。

我在研究过程中尝试了许多不同的方法,但无论我尝试过什么,我都可以对成功进行评估:数据返回真实。

这是我最近的尝试:

$(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。我尝试了很多不同的方式,包括

之类的东西
if $("#error:contains('Success')") {

submit_speedtest.inc.php的内容:

    <?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完成剩下的工作,一切正常。

再次感谢。

2 个答案:

答案 0 :(得分: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')") 

将始终为false,因为它在调用ajax函数后立即执行,而不等待函数完成。您可以在async调用中将false属性设置为$.ajax()以使调用同步,但这会违反ajax的实用程序

答案 1 :(得分: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;
});