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();
});
我有什么想法可以解决这个问题吗?
答案 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
最近的静态父元素。