2011-07-13 2 views
0

htmlボタンをクリックした後にerror.htmlファイルをロードしたいと思います。したがって、私はボタンと対応するクリックイベントを持つウェブサイトを持っています。私が)のfile_get_contents(を経由して私のhtmlファイルをロードする必要がありcheck.phpスクリプトを呼び出すために$アヤックスを使用して、このクリックイベントで

$.ajax(
     { 
      type: "POST", 
      url: "../../../server/check.php", 
      data: "login=granted&user=user&site=overview", 

      success: function(msg) 
      { 
       alert(msg); 
      } 
     }); 

。ここでは、複雑なPHP-コードです:

<?php $homepage = file_get_contents('../client/manage/login/error.html'); echo $homepage; ?>

今の問題ではなく、HTMLコードが$アヤックスの呼び出しに返され、error.htmlがロードされていないということです。 check.phpのURLをブラウザに直接入力すると動作します。

htmlファイルを読み込む方法はいくつかありますが、私はこれを正確に行う必要があります。実際には、私はこのPHPスクリプトを介してロードしたいいくつかの他のサイトがあります。

誰かが私にヒントをくれますか?

ありがとうございました。

編集:OK、もう少し具体的にしようとしています。私は正常にログインシステムを実装しました。このシステムは、ユーザー名用とパスワード用の2つのhtml入力フィールドで構成されています。両方ともデータベースに対してチェックされます。どちらも正しい場合、ユーザーは保護されたHTMLサイトにアクセスすることができます。

これで、ユーザーは保護されたサイトのURLをブラウザのアドレスバーに直接入れることはできません。したがって、.htaccessファイルを作成し、mod_rewriteの助けを借りて、保護されたhtmlサイトのすべての要求をcheck.phpにリダイレクトさせました。ここで は.htaccessのだ:

RewriteEngine On 
RewriteBase /simulation/client/manage 
RewriteRule ^([a-zA-Z]+)\.html$ ../../server/check.php?page=$1 [L] 

あなたが見る、すべての保護されたhtmlファイルの管理/ /シミュレーション/クライアントであり、これは、すべての保護されたサイトがでているされているパスであるユーザーは以下のいずれかにリダイレクトしたい場合。それらは、彼がアクセスしたいと思う対応サイトでcheck.phpに送られます。 は、ここでPHPコードです:

if(strcmp($_POST["login"],"granted") == 0) 
{ 
    $_SESSION['user'] = $_POST["user"]; 
} 
else if(strcmp($_POST["logout"],"logout") == 0) 
{ 
    session_unset(); 
    $_SESSION=array(); 
} 

if(!isset($_SESSION['user'])) 
{ 
     $homepage = file_get_contents('../client/manage/login/error.html'); 
     echo $homepage; 
} 
else 
{ 
     $homepage = file_get_contents('../client/manage/'.$page.'.html'); 
     echo $homepage; 
} 

これまでのところ、とても良いです。このcheck.phpでは、セッション変数が設定されているかどうかを確認します。ユーザーは正常にログインした場合にのみ設定され、そうでない場合はerror.htmlがロードされます。 これはすべてうまくいきます。ユーザーが保護されたページの1つのURLをブラウザに入力してログインしていない場合、file_get_contentsはerror.htmlページを読み込み、それ以外の場合は保護されたページの1つが読み込まれます。

唯一の問題は、私が$ .ajax経由でスクリプトを呼び出すと、何もロードされないということです。

+0

あなたは「代わりにHTMLコードが$ .ajax呼び出しに返されます」というHTMLコードは何ですか? –

+0

doctypeとウェブサイトで宣言されているその他すべてのものを含む、ウェブサイトの完全なコード。 – enne87

+0

アラート(msg)は次のように表示します:<!DOCTYPE HTML PUBLIC " - // W3C // DTD HTML 4.01 // EN" "http://www.w3.org/TR/html4/strict.dtd"> \t \t \t エラー \t – enne87

答えて

0

これは、AJAX呼び出しの意図された動作です。そのURLの内容を要求しています(PHPスクリプト)。私が正しくあなたの必要性を理解していれば、ページの本文に返されたHTMLを挿入することもできます

$.ajax(
     { 
      type: "POST", 
      url: "../../../server/check.php", 
      data: "login=granted&user=user&site=overview", 

      success: function(msg) 
      { 
       $('body').html(msg);//ADDED LINE 
      } 
     }); 
+0

は正しくありません。私があなたの答えを正しく理解していれば、ajax呼び出しがPHPスクリプト自体を返すと言っていますか?もしそうなら、これは間違っており、PHPスクリプトの出力を返します。 –

+0

私もこのアイデアを持っていましたが、私にとってこれは非常に洗練された解決策ではありません。このサイトには多くのメタデータも含まれていますので、これはあまり理想的ではありません。 – enne87

+0

市民がいない、Jakeが正しいです、ちょうどHTMLページのコードが返されます。 – enne87

0

[OK]を、この問題に対する最善の解決策は、PHPとキャッチでREAD_FILE()でファイルを読むことです私の意見ではブラウザのhtmlコード はその後、私のユーザーアヤックス成功コールバック関数では以下の3つのコマンド:

$.ajax(
    { 
     type: "POST", 
     url: "../../../server/check.php", 
     data: "login=granted&user=user&site=overview", 

     success: function(msg) 
     { 
      document.open(); 
     document.write(msg); 
     document.close(); 
     } 
    }); 

このソリューションは、ジェイクのとほぼ同じですが、ここでは、文書全体を置き換えることができます。とにかく助けてくれてありがとう。

+0

誰でもJavascriptを編集できるので、login = grantedで渡してそのようにエントリーすることに注意してください。コードの変更方法を計画していない限り、**巨大な**セキュリティホールがあります。 – thedaian