javascript - 与 AJAX 服务器对话时显示弹出 div

标签 javascript html ajax jquery popup

当我的网站与 AJAX 服务器通信时,我试图在屏幕中间显示一个弹出窗口。由于某些操作需要几秒钟才能完成,因此我想向用户提供操作正在进行的视觉提示。例如,您可以在我的网站上创建音乐播放列表。创建播放列表时,我希望弹出一个 div 表示它正在我的服务器上创建播放列表。

我做了一个jsfiddle显示我用来尝试生成此内容的函数,但我得到了一些相反的效果。在 fiddle 中,它在尝试与服务器通信后显示弹出窗口(它将无法与服务器通信,因为我拒绝域外的任何内容),但由于它无法与服务器通信,因此它永远不会调用 hide_popup()

在我的服务器上,它甚至从不显示弹出窗口(除非我在 show_popup() 调用之后直接调用 alert())。

我不知道为什么会发生这种情况,但我只是想
1. 显示弹窗
2. 执行我的 AJAX 调用
3.隐藏弹窗

有什么建议吗?

最佳答案

您编写代码的方式存在一些问题。以下是其中几个:

(1.)调用:

var response = get_server_response("action=createPlaylist&name="+ name, false);

您期望立即得到响应,而 AJAX 调用不会发生这种情况。此外,您还为 async 参数传递 false,这使其实际上成为一个 sync 调用。这就是为什么您的代码在执行其他操作之前只是等待。

(2.)实现:

xmlhttp.onreadystatechange = function()
{
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
    {
        response = xmlhttp.responseText;
    }
}
xmlhttp.open("POST", ajax_server, async);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send(url);
return response;

您仅在 response 中缓存结果,并且在跟踪 onreadystatechange 时不对其进行处理。您实际上是在调用后立即处理它,该调用将在调用后执行,而不是在收到响应时执行。无需在此处返回响应。

(3.)弹出窗口:

您没有在适当的位置使用显示/隐藏。

解决方案:

我建议您在通过实现函数来跟踪 onreadystatechange 时触发回调。在进行网络调用之前显示弹出窗口。根据 readyStatestatus 将其隐藏在回调函数中。

这是一个适合您的 fiddle :http://jsfiddle.net/nDNXc/549/

希望有帮助。

关于javascript - 与 AJAX 服务器对话时显示弹出 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18851883/

相关文章:

html - 我的弹出窗口上的方向箭头

javascript - 通过一系列 promise (JS 继承/接口(interface))编译结果

javascript - Jquery Ajax 总是触发错误

c# - Linq to SQL 获取多列

javascript - JSON - 查找对象的长度

javascript - setInterval 不继续

用于 Assets (样式表、JavaScript、图像等)的 HTML5 localStorage

javascript - 使用 React Router 根据当前 View 有条件地渲染背景图像

javascript - jQuery 图没有显示

html - 如何将类属性添加到 discourse-modal div