我如何处理来自服务器的jQuery .ajax响应

时间:2011-09-13 00:48:05

标签: jquery ajax forms

我试图弄清楚如何使用ajax / query处理来自服务器的响应(服务器返回true或false(json编码)):

function submitFormWithAjax(form) {
    form = $(form);

    $.ajax({
        url: form.attr('action'),
        data: form.serialize(),
        type: (form.attr('method')),
        dataType: 'json'
    });

    var serverResponse = eval(result.responseText);
    console.log(serverResponse);
    return serverResponse;
}

现在当我控制日志结果时,属性responseText正确显示为true / false,但该函数似乎总是返回true。我不是一个javascript / jquery程序员,所以如果我在上面做的看起来'愚蠢'原谅我,我正在尝试将事情拼凑在一起。

- 更正,该函数始终返回false(不是如上所述)

3 个答案:

答案 0 :(得分:3)

function submitFormWithAjax(form) {
    var form = $(form);
    var ret = false;
    $.ajax({
        url: form.attr('action'),
        data: form.serialize(),
        type: (form.attr('method')),
        datatype: 'json',
        success: function( data, status, xhttp) {
             // data will be true or false if you returned a json bool
             ret = data;
        },
        async: false // this is generally bad, it will lock up your browser while it returns, but the only way to fit it into your pattern.
    });
    return ret;
}

还有一个插件可以为您完成一些工作:
http://jquery.malsup.com/form/

哦,此外,请注意您的财产和价值名称的情况。我认为“dataType”需要是“数据类型”

我对这个解决方案并不十分了解,但它可以帮到你需要的地方。我认为你需要重构一下才能让它以异步方式正常工作。

答案 1 :(得分:1)

我怀疑你正在返回一个看起来像布尔的字符串。如果您将结果记录到console.log(result.responseText)之类的控制台,result.responseText会是什么样子?它是否包含引号?

如果我是对的,你可能想要这样做:var serverResponse = $.parseJSON($.parseJSON(result.responseText))

如果它是一个字符串,你可以把它改成不是一个字符串,你应该这样做,并使用Darthg8r的答案。

答案 2 :(得分:1)

这可能更接近正确的做法....

$("#SomeButtonThatOpensDialog").click(function()
{
    $("#ElementWithForm").dialog({
        // dialog options here
        buttons: {
            Submit: function() {
                $.ajax({
                    // ajax options
                    success: function(data, status, xhttp)
                    {     
                        if ( data )
                        {
                          // if true
                          $("#ElementWithForm").dialog("destroy");
                        }
                        else 
                    { // if false, show some sort of message with errors
                            alert("OH NO!");
                        }                      
                    }
                });
            }
        }
    })
});