您好,其他程序员!
我写信给你是为了请求一些我最近遇到的问题的帮助。问题如下:
1)我有一个用jQuery实现的ajax请求。
2)在返回成功的响应后,脚本应该重新加载具有相应更改的页面,如果有任何验证错误,请在隐藏字段后插入它们,用于存储非关键的杂项数据。如果存在任何验证错误,则不会保存更改,只会使用验证错误消息重新加载页面。验证本身由servlet处理。
3)我注意到一切正常,当在实际附加错误消息之前出现任何类型的alert()时,我不希望有这样的警报。
以下是JavaScript代码:
$('#randomFormElement').submit(function() {
$(this).ajaxSubmit({
success: function (data, status) {
randomFunctionToReloadThePage(arg1, arg2, arg3);
var errors = $(data).find('.classNameOfTheErrors').xml();
//alert(something);
$(errors).insertAfter('#idOfTheHiddenField');
},
error: function (jqXHR, textStatus, thrownError) {
//Error handling if the ajax response fails.
}
});
});
所以,主要的问题是:什么是alert()使它有效?
==========================
在Chrome上,它无论如何都无效。
在FF上,它仅在存在某些alert()时才起作用。
提前致谢!
答案 0 :(得分:5)
alert()
函数阻止代码执行并延迟javascript代码的处理。这可以为ajax请求提供时间来完成。
答案 1 :(得分:3)
这不是答案,而是调试提示(无法在评论中进行正确的代码格式化)。
在alert()
:
console.log( "errors:", errors );
console.log( "hidden:", $('#idOfTheHiddenField')[0] );
将警报注释掉并运行它。它在开发者控制台中显示了什么?
然后进行比较,取消注释警报,使其在这两个调用之前运行,并在Firefox中运行。现在控制台里有什么?
答案 2 :(得分:2)
感谢大家的回答,特别是gvee的答案,我设法让它发挥作用。显然,randomFunctionToReloadThePage()确实发生了异步,我设法使用.ajaxStop() method.
修复它编辑:使用ajaxStop()时发现了第二个错误。我发现正常工作的解决方案如下:
1)在randomFunctionToReloadThePage
中添加一个额外的参数2)在相应页面中使用该额外参数调用该函数。
答案 3 :(得分:1)
尝试添加:cache:false
$('#randomFormElement').submit(function() {
$(this).ajaxSubmit({
cache: false,
success: function (data, status) {
randomFunctionToReloadThePage(arg1, arg2, arg3);
var errors = $(data).find('.classNameOfTheErrors').xml();
//alert(something);
$(errors).insertAfter('#idOfTheHiddenField');
},
error: function (jqXHR, textStatus, thrownError) {
//Error handling if the ajax response fails.
}
});
});
答案 4 :(得分:0)
这件事也发生在我身上。我们的代码中没有警报。 Settimeout
函数解决了我的问题。将{alert}替换为"setTimeOut"
函数,并在其中添加其余代码。
setTimeout(function(){ //your code here }, 300);