JavaScript:函数无法正常工作()
可能的方案
你好,其他程序员!
我写信给你是为了请求一些我最近遇到的问题的帮助。 问题如下:
1)我有一个用jQuery实现的ajax请求。
2)在返回成功的响应之后,脚本应该重新加载具有相应更改的页面,如果存在任何validation错误,则在隐藏字段之后插入它们,用于存储非关键的杂项数据。 如果存在任何validation错误,则不会保存更改,只会使用validation错误消息重新加载页面。 validation本身由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()时才起作用。
提前致谢!
alert()
函数阻止代码执行并延迟javascript代码的处理。 这可以给ajax请求完成时间。
这不是一个答案,而是一个调试提示(无法在注释中进行正确的代码格式化)。
在alert()
之后添加这两个调用:
console.log( "errors:", errors ); console.log( "hidden:", $('#idOfTheHiddenField')[0] );
将警报保留注释并运行它。 它在开发者控制台中显示了什么?
然后进行比较,取消注释警报,使其在这两个调用之前运行,并在Firefox中运行。 现在控制台里有什么?
感谢大家的回答,特别是gvee的答案,我设法让它发挥作用。 显然,在randomFunctionToReloadThePage()中确实存在异步,我设法使用.ajaxStop()方法修复它。
编辑:使用ajaxStop()时发现第二个错误。 我发现正常工作的解决方案如下:
1)在randomFunctionToReloadThePage中添加一个额外的参数
2)在相应页面中使用该额外参数调用该函数。
尝试添加: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. } });
});