4

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

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

4

3 回答 3

5

那是因为您正在进行 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();
});
于 2012-12-24T16:43:49.027 回答
2

您正在发送 2 个请求。一个使用 .ajax,另一个使用 .getJson。

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

于 2012-12-24T16:50:44.090 回答
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

于 2012-12-24T16:46:17.483 回答