我有一个小问题。说我有一个js功能
$(function() {
$(".button").click(function(){
var id=$(this).attr('id');
var dataString = 'id='+ id ;
$.ajax({
type: "POST",
url: "download_number.php",
data: dataString,
cache: false,
success: function(html)
{
$("#div_"+id).html(html);
} });
window.open('File_download.php?file_id='+id, '_blank' );
});
你可以看到window.open
来电是在$ .ajax电话之后
是否保证每次在页面重新加载之前都会执行$ .ajax调用,如果没有那么
我们不应该在成功函数中声明window.open
吗?
在我看来,当服务器响应缓慢时,页面将首先重新加载,$.ajax
调用将被window.open
函数中断
但是我在这里得到一个downvote同样的原因stackoverflow.com/questions/12908138/how-to-get-the-id-or-name-of-related-file/
感谢让我的信念更加强大
答案 0 :(得分:1)
在您的示例中,window.open
函数将始终(!)在success
调用的ajax
回调函数之前调用。 Ajax流量始终是异步的,而window.open
函数驻留在同步JS <script>
标记中。
由于JavaScript是单线程的,因此所有同步语句将始终在ajax setTimeout animate
等任何异步功能之前执行。
$.ajax({
type: "POST",
url: "download_number.php",
data: dataString,
cache: false,
success: function(html) { // asynchronous functionality
$("#div_"+id).html(html);
}
});
// within synchronous script statements
window.open('File_download.php', '_blank' );
答案 1 :(得分:1)
是的,Ajax是异步的,因此您将在启动XHR过程后立即打开该窗口。要下载已处理的数据,请从成功回调中打开新窗口。然而,我不确定“在页面重新加载之前”是什么意思 - 没有代码可以做到这一点。
此外,我不知道您的服务器的行为,file_download.php
似乎独立于您的ajax调用。你不应该通过那里的ajax传递download_number
吗?