jQuery AJAX发送两个请求

时间:2012-12-24 16:40:06

标签: javascript jquery ajax

jQuery AJAX似乎正在发送两个请求。由于我使用双因素身份验证方法,基于时间,第二个请求失败,因此原始请求“失败”。

第一个是帖子请求,没关系,但是有一个GET请求,这不是很好。

这是我用来生成查询的javascript。

$('#form').live('submit', function(event) {
    var target = $('#ajax');
    var url = '/ajax/user/authenticateLevel3';
    $.ajax({
        type: "POST",
        url: url,
        data: $('#form').serialize(),
        dataType: 'json',
        success: function(data, status) {
            $.getJSON(url, function(data) {

                if (!data.resultCode) {
                $('#ajax').html($.base64.decode(data.html));
                $('#ajax').modal();
                } else {
                    location.reload();
                }

            });
        }
    });
    event.preventDefault();
});

我有什么想法可以解决这个问题吗?

3 个答案:

答案 0 :(得分:4)

这是因为您正在进行2次ajax调用(.ajax.getJSON

尝试这样做(使用文档事件委派而不是.live):

$(document).on('submit', '#form', function(event) {
    var target = $('#ajax');
    var url = '/ajax/user/authenticateLevel3';
    $.ajax({
        type: "POST",
        url: url,
        data: $('#form').serialize(),
        dataType: 'json',
        success: function(data, status) {
            if (!data.resultCode) {
                $('#ajax').html($.base64.decode(data.html));
                $('#ajax').modal();
            } else {
                location.reload();
            }
        }
    });
    event.preventDefault();
});

答案 1 :(得分:2)

您正在发送2个请求。一个是.ajax而另一个是.getJson。

删除.getJson请求。由于没有将dataType属性传递给.ajax,jquery将尝试猜测响应类型。您还可以将dataType指定为json以强制转换。成功回调的'data'参数应该转换为这两个选项的javascript对象。

答案 2 :(得分:0)

getJSON是一种用于从服务器检索JSON的AJAX方法,而不是用于处理另一个ajax方法返回的数据。只需删除它。

$('#form').live('submit', function(event) {
    var target = $('#ajax');
    var url = '/ajax/user/authenticateLevel3';
    $.ajax({
        type: "POST",
        url: url,
        data: $('#form').serialize(),
        dataType: 'json',
        success: function(data, status) {
            if (!data.resultCode) {
            $('#ajax').html($.base64.decode(data.html));
            $('#ajax').modal();
            } else {
                location.reload();
            }
        }
    });
    event.preventDefault();
});

由于您提到您正在切换到.on,因此语法如下:

$(parent).on('submit', '#form', function(event) {
    /*
     * ...
     */
});

其中parent#form最近的静态父元素。