如何使 AJAX 呼叫挂起

How to make an AJAX call hang

当脚本加载时间过长时,我正在尝试测试我的网站的行为。我知道如何通过向主机文件中添加一些内容来完全阻止请求,使其 returns 成为 404,但不确定如何强制请求不完成。

示例,

127.0.0.1 translate.google.com # this blocks google translate from loading (404)

相反,我想让 translate.google.com 不响应 x 秒。

我正在使用 requirejs 加载我的脚本,我注意到超时行为与 404 不同。

我添加了一个模块以允许 google 翻译是可选的,当我通过主机文件阻止它时,网站运行正常。当脚本超时时,站点无法加载。

// 

define("optional", [], {
    load: function (moduleName, parentRequire, onload, config) {
        var onLoadSuccess = function (moduleInstance) {
            // Module successfully loaded, call the onload callback so that
            // requirejs can work its internal magic.
            onload(moduleInstance);
        }

        var onLoadFailure = function (err) {
            // optional module failed to load.
            var failedId = err.requireModules && err.requireModules[0];
            console.warn("Could not load optional module: " + failedId);

            // Undefine the module to cleanup internal stuff in requireJS
            requirejs.undef(failedId);

            // Now define the module instance as a simple empty object
            // (NOTE: you can return any other value you want here)
            define(failedId, [], function () { return {}; });

            // Now require the module make sure that requireJS thinks 
            // that is it loaded. Since we've just defined it, requirejs 
            // will not attempt to download any more script files and
            // will just call the onLoadSuccess handler immediately
            parentRequire([failedId], onLoadSuccess);
        }

        parentRequire([moduleName], onLoadSuccess, onLoadFailure);
    }
});

您需要使用您可以控制的网站对其进行测试。最简单的解决方案是使用您自己的本地主机和一个等待几秒钟的小脚本。

等待 30 秒的简短 PHP 示例如下所示:

<?php
  sleep(30);
  echo 'DONE';

只需增加睡眠秒数,直到您的应用程序超时。

Here is another solution in Node.js

更新:

下一步是重定向 url 你想在你的主机文件中超时(如你的问题):

127.0.0.1 translate.google.com

运行 本地 Apache server(127.0.0.1 是本地主机的标准配置)并将以下 .htaccess 文件放入您的 apache 根目录(通常 "htdocs"):

DirectoryIndex index.php
RewriteEngine on
RewriteRule ^(.*)$ index.php [QSA,L]

然后将上面的 PHP 示例放入根目录中名为 index.php 的文件中(通常为 "htdocs")。

然后您的本地服务器应该响应调用,您可以调整响应时间直到超时。