1

実行にかなり時間がかかる Javascript 関数があります。javascript 関数が戻るまで読み込みアイコンを表示したいのですが、関数の読み込み中はページに何も表示されません。ページは白く、何もしません。

Chrome を使用してデバッグすると、関数が呼び出される前に読み込みアイコンが表示され、呼び出されると消えます。Javascript を含む PHP ページに対して AJAX 呼び出しを実行できると思っていましたが、実際には AJAX 応答にその JavaScript が含まれています...

$.ajax({
  type: "POST",
  url: "resources/scripts/loadXML.php",
  data: "datafile="data_file_path,
  success: function(msg){
    alert( "Data Saved: " + msg );
  }
});

そして私はそれを取り戻します。MSG はこれと同じです (これは実際にはページ内のスクリプトです)。

<script type="text/javascript">

if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET",<?php echo json_encode($data_file); ?>,false);
xmlhttp.send();
return xmlhttp;
</script>

ページを白くしたくないだけで、その機能が読み込まれますか...何かアイデアはありますか!?

編集:

このコードを非同期で実行して、ページをブロックしないようにします。この関数の実行中にスピナーを見たいです。以前は、この同じページにあったので、ファイルを開くように簡単に設定できましたが、非同期呼び出しを行う場合は、別のファイルに配置する必要があります。しかし、どうすればこのファイルにパラメータを渡すことができますか?!:

<script type="text/javascript">

if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET",**$NEEDTOGETTHEFILENAME**,false);
xmlhttp.send();
return xmlhttp;
</script>
4

2 に答える 2

0

beforeSubmitページが読み込まれていることをユーザーに知らせるために、スピナーなどを読み込むハンドラーを追加します。

$.ajax({
  type: "POST",
  url: "resources/scripts/loadXML.php",
  data: "datafile="data_file_path,
  beforeSubmit: function(){
        //show a spinner here
  },
  success: function(msg){
    //remove spinner
    alert( "Data Saved: " + msg );
  }
});
于 2012-05-23T23:52:05.263 に答える
0

jquery を使用してリクエストを行っているため、最も簡単な方法は、リクエストをラップすることです。

$(document).ready(function(){
  //show spinner
  //your ajax request here
}

リクエストが返されたときにスピナーを非表示にするか、コンテンツに置き換えます。

これは疑問を投げかけます: 別の ajax リクエストを実行するスクリプトを取得するために 1 つの ajax リクエストを実行するのはなぜですか? ここで実際に何を達成しようとしていますか?

于 2012-05-24T00:00:56.647 に答える