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

しかし、私はここで同じ理由で反対票を投じます。

そして、私の信念をより強くしてくれてありがとう

4

2 に答える 2

1

あなたの例では、window.open関数は常に (!)呼び出しsuccessに与えられたコールバック関数の前に呼び出されajaxます。Ajax トラフィックは常に非同期ですが、window.open関数は同期 JS<script>タグ内にあります。

ajax setTimeout animateJavaScript はシングルスレッドであるため、すべての同期ステートメントは常に、非同期機能などの前に実行されます。

$.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 に答える