0

在我们的应用程序中,我们在最终提交按钮上进行 ajax 调用,并显示一个带有进度条的模式对话框。成功处理后,对话框将使用响应进行更新。现在我的要求是将模式对话框更改为非对话框,并允许用户在 ajax 调用完成时导航到另一个页面。

如果我将模态窗口更改为非模态窗口会有什么影响。ajax 调用会继续还是会中止。如果它继续,它将引用对话框以使用响应更新它。

请让我知道你的看法。

4

2 回答 2

1

在进行 AJAX 调用时,无论您在操作视图方面做什么,都不会影响 AJAX 调用本身。只要您让 AJAX 调用完成并在回调中显示更改,就可以了。不用说,您无法更改您所在的实际页面,但如果我理解正确,您无论如何都不会这样做。

于 2012-08-14T03:17:03.977 回答
1

一个简单的实验来尝试这个想法

我编写了一个简单的示例,其中我有一个带有指向另一个页面的链接的 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 代码以使用此端点并向您的用户显示进度。

于 2018-10-05T20:28:44.100 回答