JavaScript:函数无法正常工作()

时间:2013-07-31 07:52:08

标签: javascript jquery ajax

Possible solution

您好,其他程序员!

我写信给你是为了请求一些我最近遇到的问题的帮助。问题如下:

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()时才起作用。

提前致谢!

5 个答案:

答案 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);