jQuery AJAX发送两个请求

jQuery AJAX sending two requests

本文关键字:两个 请求 AJAX jQuery      更新时间:2023-09-26

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();
});

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

这是因为你正在做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个请求。一个是。ajax,另一个是。getjson。

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

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