14

私は持っています

index.php

<select id="year_list" name="year_list" onchange="check_year_event('year_list', 'event_list');" > . . .  </select>

<select id="event_list" name="event_list" onchange="check_year_event('year_list', 'event_list');" > . . . </select>
.
.
.
<?php 
 function checkYearandEvent($year, $event) {
  $year_event = mysql_query("SELECT * FROM year_event WHERE year = '$event' AND event = '$event'")

  if (mysql_num_rows($year_event) > 0) {
   // do this
  }

 }
?>

myscripts.js

function check_year_event(year_id, event_id) {
 var year = document.getElementById(year_id).value;
 var event = document.getElementById(event_id).value;

 // call PHP function (but I don't know how): checkYearandEvent(year, event);

}

select私の質問は、ユーザーが要素のいずれかの値を変更するたびにPHP関数を呼び出す方法です。

4

6 に答える 6

8

ajax を使用する必要があります。基本的な例があります:

myscripts.js

function AjaxCaller(){
    var xmlhttp=false;
    try{
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }catch(e){
        try{
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }catch(E){
            xmlhttp = false;
        }
    }

    if(!xmlhttp && typeof XMLHttpRequest!='undefined'){
        xmlhttp = new XMLHttpRequest();
    }
    return xmlhttp;
}

function callPage(url, div){
    ajax=AjaxCaller(); 
    ajax.open("GET", url, true); 
    ajax.onreadystatechange=function(){
        if(ajax.readyState==4){
            if(ajax.status==200){
                div.innerHTML = ajax.responseText;
            }
        }
    }
    ajax.send(null);
}

function check_year_event(year_id, event_id) {
 var year = document.getElementById(year_id).value;
 var event = document.getElementById(event_id).value;

    callPage('file.php?year='+year+'&'+'event=+'+event,document.getElementById(targetId));
}

file.php

<?php 

     function checkYearandEvent($year, $event) {
      $year_event = mysql_query("SELECT * FROM year_event WHERE year = '$event' AND event = '$event'")

      if (mysql_num_rows($year_event) > 0) {
       // do this
      }

     }
    echo checkYearandEvent($_GET['year'], $_GET['event']);
?>
于 2011-05-12T21:26:57.787 に答える
7

あなたが期待しているかもしれない方法でこれを行うことはできません。ブラウザが HTML を受信する前に、PHP がサーバー上で実行されます。一方、JavaScript はブラウザーで実行され、HTML の作成に使用される PHP (またはその他のサーバー側言語) を認識しません。

PHP 関数を「呼び出す」には、サーバー (AJAX と呼ばれることが多い) に要求を返す必要があります。たとえばcheckYear.php、イベントをチェックし、チェックが成功したかどうかを示す HTML を返すスクリプトを作成できます。HTML フラグメントが JavaScript に戻ったら、それをページに挿入します。

お役に立てれば!

于 2011-05-12T21:17:56.147 に答える
2

JavaScript はクライアント側の言語で、PHP はサーバー側の言語です。したがって、JavaScript コードから直接 PHP 関数を呼び出すことはできません。ただし、できることは、AJAX 要求を投稿し (バックグラウンドで PHP ファイルを呼び出します)、それを使用して PHP コードを実行し、必要なデータを JavaScript に返すことです。

于 2011-05-12T21:18:09.047 に答える
1

これを行うには多くの方法があります。私が好むのは、MooTools Requestオブジェクトを使用することです。

たとえば、変数を介していくつかのパラメーターajaxCallable.phpを受け取るスクリプトがあるとします (Javascript 側で)。$_REQUEST

function check_year_event(year_id, event_id) {
    var year = document.getElementById(year_id).value;
    var event = document.getElementById(event_id).value;

    var myRequest = new Request({method: 'get', url: 'ajaxCallable.php'});
    myRequest.send('yearVar=' + year + '&eventVar=' + event);
}

次に、ajaxCallable.php変数にアクセスできるようになります:$_REQUEST['yearVar']$_REQUEST['eventVar'].

于 2011-05-12T21:22:19.153 に答える
1

基本的に、サーバー側 (PHP) とクライアント側 (JS) のスクリプトが混在しています。

ただし、可能です-ありがとうございます。AJAXに。選択ボックスが変更された後に何をする必要があるのか​​ について具体的ではなかったので、いくつかのリソースを紹介し、次のことを提案することしかできません。

  • jQuery を学び、使用を開始する ( jquery.com ) - ブラウザー間の互換性を開始して維持するのに役立ちます。
  • AJAXリクエストの作成方法を学びます(たとえば、onchangeイベントが発生したときに起動していた関数で)-eg. .post() jQuery 関数を使用して、
  • PHP からデータを返す方法を学び (例: json_encode()PHP で使用しますが、生の HTML も問題ありません)、それを JS で使用します。
于 2011-05-12T21:20:12.037 に答える
0

私は今週プロジェクトに取り組んでいて、onclick() から PHP スクリプトを呼び出す簡単な方法を思いつきました。こんなふうになります。

この場合、「sidebarItem」という div で onclick() 呼び出しを定義します…</p>

<a><div class="sidebarItem" onclick="populate('#content', 'help', 'open')">Click me for new content</div></a>

次に、外部ファイルをターゲット コンテナーにロードする簡単な小さな JS 関数を作成しました…</p>

function populate($container, $page, $item){
$($container).load('cyclorama/includes/populate.php?$page='+$page+'&$item='+$item);}

次に、$page と $item を取得し、データベースにクエリを実行して、新しいコンテンツを返す小さな php ファイルを作成します。

<?php
$page = $_GET['$page'];
$item = $_GET['$item'];
$getContentQuery = "SELECT content FROM myTable WHERE page='".$page."' AND item='".$item."'";
$content = mysql_query($getContentQuery, $db);
$myContent = mysql_fetch_assoc($content);
echo $myContent['content'];?>

PHP スクリプトは新しいコンテンツをエコーし​​、コンテナーにロードします。活躍できる場はたくさんあると思います。これを行わない明らかな理由があるかどうかを知りたいと思います。AJAX だけではなく、javascript と php を使用しますが、高速で比較的簡単です。

于 2013-01-31T16:11:11.507 に答える