0

我有一个小问题。说我有一个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函数中断

但出于同样的原因,我在 stackoverflow.com/questions/12908138/how-to-get-the-id-or-name-of-related-file/

谢谢你让我的信念更坚定

4

2 回答 2

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' );
于 2012-10-16T12:17:58.650 回答
1

是的,Ajax 是异步的,因此您将在启动 XHR 进程后立即打开该窗口。要下载处理后的数据,请从成功回调中打开新窗口。但是我不确定您所说的“在页面重新加载之前”是什么意思 - 没有代码可以做到这一点。

另外我不知道您的服务器的行为如何,这file_download.php似乎与您的 ajax 调用无关。你不应该在那里传递download_number你通过ajax收到的吗?

于 2012-10-16T12:21:02.510 回答