2017-12-19 19 views
2

jsのスクリプトから現在のPHPファイルにデータを送信し、それが現在のブラウザにロードされている:私はPHPファイル、content.phpを持って

<html> 
    <head> 
     <title>Content</title> 

     <script src="content.js"></script> 
    </head> 

    <body> 
     <?php 
      if (isset($_POST["status"]) && ($_POST["status"] === 1)) { 
     ?> 

      Content for users with status 1 

     <?php 
      } else { 
     ?> 

      Content for users with different status 

     <?php 
      } 
     ?> 
    </body> 
</html> 

私が何をしたいのか、

に設定されています
$_POST["status"] 

私は隠されたHTMLフォームを使用してjavascて送信ボタンをクリックすることについて考えている

content.js 

から変数ript、それは実際にはエレガントなソリューションのようには見えません。

XMLHttpRequestを使用して、現在表示/ロードされているページにデータを送信する方法が見つからないという問題もありました。

私は余分なライブラリを使用していません、javascriptとphpだけです。

隠されたhtmlフォームの私の問題に対して、より洗練されたソリューションがありますか?

+1

で設定します。これは本当に[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)のように聞こえます – charlietfl

+0

ステータスを設定するためにセッション値を使用するのはなぜですか? – Geshode

+0

***エレガントなソリューションを定義する***。 –

答えて

1

サーバーサイドスクリプトを隠して実行し、htmlを更新する必要があるため、AJAXを使用する必要があるようです。

  1. interface.phpcontent.jsを持っており、status
  2. content.phpdiv
  3. content.js送信Ajaxのポスト要求は
  4. interface.phpdivが更新されstatus
  5. に応じたコンテンツを送信します。ここで

content.jsinterface.php

let status = 1; 
 
loadDoc(status); 
 

 
function loadDoc(status) { 
 
    let xhttp = new XMLHttpRequest(); 
 
    xhttp.onreadystatechange =() => { 
 
    if (xhttp.readyState == 4 && this.status == 200) { 
 
     document.getElementById("content").innerHTML = 
 
     xhttp.responseText; 
 
    } 
 
    }; 
 
    xhttp.open("POST", "content.php", true); 
 
    xhttp.send("status=" + status); 
 
}
<html> 
 
    <head> 
 
     <title>Content</title> 
 
     <script src="content.js"></script> 
 
    </head> 
 

 
    <body> 
 
     <div id="content"></div> 
 
    </body> 
 
</html>

そしてここでは、あなたのcontent.php

<?php 
    if (isset($_POST["status"]) && ($_POST["status"] === 1)) { 
?> 

    Content for users with status 1 

<?php 
    } else { 
?> 

    Content for users with different status 

<?php 
    } 
?> 

ビンゴでいます! $_POST["status"]content.js

0

POST変数はリクエストヘッダーでのみ渡すことができます。これは、あなたが既に知っているように、フォーム提出かAJAXリクエストのいずれかでなければならないことを意味します。別のクライアント側リソースに既存の要求に新しい情報を提供させる方法はありません。

関連する問題