当没有加载延迟时,Jquery ajax调用不能在Firefox中工作

时间:2015-03-06 20:17:51

标签: jquery ajax firefox

以下是代码:

    function onSelectClient(index) {

        var orderNumber = "123";

        $.ajax({
            async: true,
            type: "POST",
            url: "myAspx.aspx/GetPASR",
            data: '{orderNumber: "' + orderNumber + '" }',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: OnSuccess,
            failure: function (response) {
                alert(response.d);
            }
        });
        alert("After Call");
        return false;
    }

function OnSuccess(response) {
       //Do some stuff and then below

        location = "myAspx.aspx";
    }

ajax调用在IE和Chrome中运行良好。 在Firefox中,当我在通话结束后收到警报时,它会工作,我会花一点时间点击"确定"。 它在firefox(V 36.0.1)中不起作用,当我没有那个警报或者我把鼠标放在正确的位置并且当它出现时点击Ok。 另外,我在FF的控制台中看到两个错误。 1."不推荐使用getPreventDefault()。请改用defaultPrevented。" - 我在应用程序的所有页面中都看到了这一点。所以,这不太可能造成麻烦。 2."未被捕获的异常:内存不足"。不确定它是否相关。

3 个答案:

答案 0 :(得分:4)

将它作为同步通话选项吗?我有同样的问题,并使用async:false。

答案 1 :(得分:3)

<强> TL; DR;

我最近在uncaught exception: out of memory阅读了很多问题。我认为问题更多的是表单提交按钮的HTML代码而不是ajax调用(这对我来说似乎很好)。好吧,至少这个答案基于一个纯粹的假设,即您使用按钮type="submit"发布数据。

使用ajax时,最好使用按钮类型type="button"而不是type="submit"。后者在firefox中产生了一个问题(这在逻辑上是合理的,继续阅读以了解原因)。虽然,你没有提到有关页面重新加载的任何内容,但我猜测该页面在FF工作时重新加载(带有alert())。

我对uncaught exception: out of memory的推理是,当你提交表单(相信它是一个ajax调用)时,表单实际上是由提交按钮提交的,同时ajax应该处理请求,导致并行POST请求。这也解释了为什么你的表单提交由于'alert()'而导致ajax延迟 - 请求并不平行。

关于其他消息Use of getPreventDefault() is deprecated,我认为这是一个警告,而不是错误。只要您的jquery未更新且不支持getPreventDefault(),这几乎不会影响您的功能。顺便说一句,如果您查看jQuery.js内部,您会发现this.isDefaultPrevented=e.defaultPrevented||e.getPreventDefault&&e.getPreventDefault()?U:Y之类的行可能会导致此警告。如果要删除此警告,请将行更改为this.isDefaultPrevented=e.defaultPrevented?U:Y。此外,查找更多getPreventDefault次出现并根据需要进行更改。 注意:如果您不确定所做的更改,请不要编辑库。

答案 2 :(得分:0)

在我的案例中,Ajax在Firefox上工作。尽管我已经完成async: false,因为我必须等待第一个电话结束,然后第二个电话才能开始。

$.ajax({
   url : url,
   async : false,
   type: post,
   dataType : html,
   data : data,
   success : xxx,
   error : yy
});