在我们的应用程序中,我们在最终提交按钮上进行 ajax 调用,并显示一个带有进度条的模式对话框。成功处理后,对话框将使用响应进行更新。现在我的要求是将模式对话框更改为非对话框,并允许用户在 ajax 调用完成时导航到另一个页面。
如果我将模态窗口更改为非模态窗口会有什么影响。ajax 调用会继续还是会中止。如果它继续,它将引用对话框以使用响应更新它。
请让我知道你的看法。
在我们的应用程序中,我们在最终提交按钮上进行 ajax 调用,并显示一个带有进度条的模式对话框。成功处理后,对话框将使用响应进行更新。现在我的要求是将模式对话框更改为非对话框,并允许用户在 ajax 调用完成时导航到另一个页面。
如果我将模态窗口更改为非模态窗口会有什么影响。ajax 调用会继续还是会中止。如果它继续,它将引用对话框以使用响应更新它。
请让我知道你的看法。
在进行 AJAX 调用时,无论您在操作视图方面做什么,都不会影响 AJAX 调用本身。只要您让 AJAX 调用完成并在回调中显示更改,就可以了。不用说,您无法更改您所在的实际页面,但如果我理解正确,您无论如何都不会这样做。
我编写了一个简单的示例,其中我有一个带有指向另一个页面的链接的 HTML 页面。当我单击该链接时,它会向 PHP 脚本发送一个 AJAX 请求,该脚本模拟一个长过程(等待 10 秒),然后更改会话中的一个变量。然后目标页面回显该变量。
当我单击该链接时,该页面会启动一个长 AJAX 请求,但它也会导航到另一个页面。结果是AJAX请求被取消,其他页面打印“nothing”。
这是server.php:
session_start();
$x = isset($_SESSION['x']) ? $_SESSION['x'] : 0;
sleep(10); /* simulates long process */
$_SESSION['x'] = ++$x;
echo $x;
index.html(重要部分):
<a href="other.php">Click here</a>
index.html 中的 AJAX 请求(在 <script> 标签内):
document.querySelector('a').onclick = function(e) {
var xhr = new XMLHttpRequest();
xhr.onload = function(e) {
console.log(JSON.parse(xhr.responseText));
}
xhr.open('POST', 'server.php');
xhr.send();
}
如果您的请求仅在服务器上耗时,请创建一个返回该过程进度的端点,然后在您的所有页面中添加一个 javascript 代码以使用此端点并向您的用户显示进度。