jQuery AJAX 发送两个请求

5

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

第一个请求是POST请求,这是可以接受的,但是随后有一个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();
});

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

6
你意识到你实际上提出了两个请求吗?$.ajax是一个请求,$.getJSON是第二个请求。 - Shmiddty
2
顺便提一下,live 方法已经被弃用了相当长的时间。不要使用它。 - nbrooks
@Shmiddty,嗯,是的?我应该怎么做? @nbrooks,我开始把东西移动到.on() - bear
1
你应该能够轻松地解开 $.getJSON 回调的内容,这样它可能会正常工作。也就是说,删除该块的 $.getJSON(... 和闭合的 }); 即可。 - Shmiddty
投票关闭,因为过于局限。 - Shmiddty
3个回答

6

这是因为您正在进行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();
});

2
你正在发送2个请求。其中一个使用 .ajax ,另一个使用 .getJson 。
删除 .getJson 请求。如果没有传递 dataType 属性给 .ajax,jquery 将尝试猜测响应类型。你也可以指定 dataType 为 json 强制进行转换。无论哪种选项, success 回调函数的 'data' 参数都应该被转换为 javascript 对象。

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的最近的静态父元素。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接