【问题标题】:When quick navigate from one page to another script alert shown, why? [duplicate]当从一个页面快速导航到显示的另一个脚本警报时,为什么? [复制]
【发布时间】:2015-02-12 00:07:32
【问题描述】:

我有一个 Web 应用程序 (MVC 5),当我从索引页面快速移动到不同的页面时,我收到一个 javascript 警报,告诉我:“localhost:4332 的页面说:”(它什么也没说)。

当我按下 OK 按钮时,一切都恢复正常并继续到另一个页面,我想禁用此警报从弹出到客户端。

我在想这是因为我移动到另一个页面的速度太快了,脚本无法完全运行。

我在脚本中所做的是使用从 Ajax 发布请求中获得的值初始化一个下拉列表。 (为了节省加载页面时间,我加载页面然后初始化下拉列表。

这是我的代码:

$(document).ready(function () {

    $.ajax({
                type: 'POST',
                url: '/Home/GetProfiles',

                success: function (data) {
                    $.each(data, function (key, value) {

                        $('#filterSelect').append($("<option></option>").attr("value", value).text(key));

                    });

                },
                error: function (ts) { alert(ts.responseText) }

            }); 

})

我还做了几件事,但我不想让我在这里发布的代码复杂化,我认为问题与这行代码有关。

我尝试在异常的 console.log 中添加“try”和“catch”,但我没有在控制台中得到任何信息,并且警报不断弹出

知道为什么会这样吗?我该如何解决?

【问题讨论】:

    标签: javascript jquery html ajax


    【解决方案1】:

    您收到一条消息是因为浏览页面会取消任何 AJAX 请求,因此它们会出错。您有一个显示responseTextonerror 回调,由于它出错,因此没有文本可显示。

    【讨论】:

      【解决方案2】:

      @Andrea Faulds 是正确的。发生这种情况是因为页面内容在 ajax 调用完成之前发生了变化。当您在 ajax 调用完成之前快速导航到另一个页面或重新加载当前页面时,可能会发生这种情况。

      有关适当的修复,请参阅此 URL:handle ajax error when a user clicks refresh

      总而言之,很多人都会这样做:

      error: function (ts) {
          if (ts.readyState == 0 || ts.status == 0) return;
          alert(ts.responseText);
      }
      

      但是,这也可以抑制真正的错误。例如,如果您开始 ajax 请求,然后禁用网络连接,您可能永远不会看到 alert 消息(因为在这些情况下,readyStatestatus 也为零)。

      另一种可能的解决方案是让您执行以下操作:

      error: function (ts) {
          alert(ts.responseText || 'An asynchronous request was unable to complete.');
      }
      

      在这种情况下,通过使用 || 运算符,当页面内容在 ajax 调用完成之前发生更改时,您的用户仍会看到警报。但是警报不会是空白的,因为当它是空白时,将显示另一条消息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多