0

私はphpで書かれたメインページを持っています.Ajaxを使って特定の.xmlファイルに「モジュール」をロードしますdiv。もちろん、コードを少し削除しましたが、主なものはそこにあると思います: への呼び出しload()、成功した (または失敗した) ajax リクエストのチェック、php から "返された" js 変数のチェック (私はこれについては後で説明します); これはJavaScriptです:

var ajax_error = ""; //i use this to catch load errors

//.....//

$("#div_target").load("loadmodule.php", {'module':module_number}, function(response, status, xhr)
{
  if (status == "error") //this is for ajax-related errors
  {
    alert('Failed loading module. Error: '+xhr.status + " " + xhr.statusText);
  }
  else 
  {
    //this checks if the variable has been set by the php module to represent an error
    if (ajax_error !== "")
    {
      $("#div_target").html(ajax_error); //show the error instead of the module
      ajax_error = ""; //we reset the variable for future uses
    }
    else
    {
      //do something with the correctly loaded module..
    }
  }
});

その「loadmodule.php」が続きます (ここでも、コードが削減されます)。

//check for the post value, that should be a positive number as well as check for the file to exist
if ( 
  isset($_POST['module']) 
  && is_numeric($_POST['module']) 
  && ($_POST['module'] > 0) 
  && file_exists("module_" . $_POST['module'] . ".php")
)
{
  //include module
  include("module_{$_POST['module']}.php");
}
else
{
  //error retrieving module
  ?>
  <script type="text/javascript">
    ajax_error = "Cannot load module." ;
  </script>
  <?php
}

このようにして、 のチェック中にエラーが発生した場合、$_POST['module']変数 を設定するだけでエラーが発生したことを JavaScript に「伝える」ことができます。この変数ajax_errorは、ajax がリクエストを正常に完了した後に「キャッチ」されます。すべてがうまく機能します(この変数のコンテキストはajax_error、実際にはそう見えなくても、ここの削除されたコードでは正しいです:P)、しかし..

..私の質問は次のとおりです: この方法は正しいですか? それを行うのに問題はありますか?回避策としてあまり見えないものはありますか? それとも、この状況でできる限りのことをしているだけですか?

PS: 質問にタイトルを付けるのが難しいと思いました。大丈夫だといいのですが:)

4

1 に答える 1

0

はい、これはうまくいくかもしれませんが、私には醜いようです。$ obj.loadではなく、$。getを使用することをお勧めします。サーバースクリプト(loadmodule.php)は純粋なHTMLを返しませんが、2つの値を持つJSONを返します。1つはモジュールが存在するかどうかを判断するブールフラグで、もう1つはHTMLコンテンツです。

次に、成功ハンドラーは、目的の場所に何かを配置するか、フラグがモジュールが存在しないことを示している場合にエラーメッセージを表示するかを決定します。

于 2013-03-08T15:42:18.517 に答える