我承诺会向您展示正确的方式。如果条件是您正在寻找的,首先关闭异步。其次,您需要一个 full 示例。您必须修改 AJAX 请求的 URL 并设置一些服务器代码来给您响应。我将在最后提供一个 baseline PHP 文件。
如此有效:如果我的if 条件对 JavaScript 解析器来说花费的时间太长怎么办? JavaScript 使用承诺。我不会全力以赴,我的目标是提供一个基线。在脚本结束时,您会注意到成功或失败级别。此脚本需要 两个 异步 if 条件。此外,我将script 元素保留在它所属的head 元素中,而不是廉价/静态/脆弱。最后确保您更改 HTTP 查询并在服务器上确认它,无需生成冗余文件。浏览器兼容性很好,除了不支持 IE11 但是我只遇到了非常特定的用例 require 所以如果您正在考虑将此代码用于非技术受众,我强烈建议您重新考虑您的给定问题的初始方法。
<head>
<script defer="true" type="application/javascript">
//<![CDATA[
function request(method,url)
{
return new Promise(function(resolve, reject)
{
var req = new XMLHttpRequest();
req.open(method,url);
req.withCredentials = true;
req.onerror = function() {reject(Error('Network error.'));};
req.onload = function() {if (req.status == 200) {resolve(req.response);} else {reject(Error(new Object({'response':req.response,'status':req.statusText})));}};
req.send();
});
}
function aysn_if()
{
request('get','https://www.example.com/test.php?t=1').then(function(response)
{
console.log('Success, level one if!', response);
request('get','https://www.example.com/test.php?t=2').then(function(response)
{
console.log('Success, level two if!', response);
},
function(error)
{
console.error('Failed, second level.', error);
});
},
function(error)
{
console.error('Failed, first level.', error);
});
}
document.addEventListener('DOMContentLoaded', function (e) {aysn_if();},false);
//]]>
</script>
</head>
PHP
<?php
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Origin: '.((isset($_SERVER['HTTP_ORIGIN'])) ? $_SERVER['HTTP_ORIGIN'] : '*'));
//JUST for testing, don't send this stuff outside of test environments!
ksort($_SERVER);
print_r($_SERVER);
?>