1

たとえば、次のような php ファイルがあるとします。

<?php 
echo 1;
//some functions
echo 2;
//more code to execute
echo 3;
?>

そして、私はhtmlフォームを持っています。このフォームで必要なのは、PHPスクリプトの実行中にテキストフィールドにエコーを出力することです.AJAXとJQueryで可能ですか?

私が望むのは、ユーザーが HTML ページに入り、いくつかのボタンを押すと、このボタンが PHP スクリプトを実行し、スクリプトがエコーに到達するたびに、テキストフィールドにこのエコーが表示されることです。スクリプトが終了したら、たとえば、ボタンを非表示にするなどの JQuery アクションを実行したいと考えています。出来ますか?概観アルゴリズムとはどのようなものでしょうか? ありがとう!

更新:
ユーザーがボタンを押したときにこのスクリプトを1回実行する必要がありますが、スクリプトが次のエコーに到達するたびにテキストフィールドを更新する必要があります. 、あと数秒で「3」。

4

5 に答える 5

9

残念ながら、のsuccessハンドラーは.ajax()リクエストが終了した後にのみ呼び出されるため、「ライブ更新」を行うことはできません.. :(

実際にできることは、現在の状態をセッションに保存し、各エコーでスクリプトを終了し、ページを続行するように再要求することだけです。

于 2013-02-15T09:53:14.823 に答える
3

2つの方法を使用して、応答を次のように返すことができます。json

$values = array();
$values['first'] => 1;
$values['second'] => 2;
$values['third'] => 3;
print json_encode($values);

クライアント側のjquerysuccessハンドラー

$.ajax({
    url: 'yoururl',
    type:'POST',
    data :'{ if any }'
    dataType:'json', /*most important**/ 
    success:function(data){
      console.log(data.first); //first value..etc
    }
    });

2番目の方法

サーバー側で戻りデータを追加します

$return= '';
$return.=1."||";
$return.=2."||";
$return.=3;
echo $return;exit;

とajaxで

$.ajax({
    url: 'yoururl',
    type:'POST',
    data :'{ if any }'
    success:function(data){
      console.log(data.split("||")[0]); //first value..etc
    }
    });

});

于 2013-02-15T10:16:16.983 に答える
1

php2つのスクリプトを使用する別の解決策:

  • 1つ目は実際のデータで、データをエコーする代わりにセッションに保存します
  • 2番目のスクリプトは、セッションに保存されたデータをエコーするだけです

のクライアントはjavascript、最初のスクリプトを呼び出してメインジョブを起動します。次に、2番目のスクリプトを呼び出して、進行状況を確認して表示します。

セッションをチェックする2番目のスクリプトは、次の2つの方法で記述できます。

  • 新しいデータの有無にかかわらず、チェックして直接返すだけです(例では毎秒呼び出します)
  • データがある場合は直接戻り、それ以外の場合はデータ(またはタイムアウト)を待つだけです。スクリプトが戻ったら、彼を思い出してください。

2番目のソリューションは「リアルタイム」に近く、呼び出しがはるかに少なくなりajaxます。

于 2013-02-20T15:58:14.930 に答える
1

PHP が以下のために作成する JSON 文字列を返すことができます。

$values = array();
$values['first'] => 1;
$values['second'] => 2;
$values['third'] => 3;
print json_encode( values );

この応答を JavaScript 変数に保存し、その値を使用して特定の時間に更新するよりも:

var obj = jQuery.parseJSON( response );
// as an example - to see where this goes
setTimeout(function() { $('#example').html(obj.first); }, 1000);

詳しくは:

于 2013-02-15T10:01:16.960 に答える
0

オプションはWebSocketsを使用することです。これにより、PHP と Javascript 間の「リアルタイム」通信が可能になります。

ネイティブ WebSocket は最新のブラウザーの新しいバージョンでのみサポートされていますが、古いブラウザーが ajax/iframe/flash を使用してこれをエミュレートする方法がいくつかあります。

たとえば、socket.ioクライアントは Internet Explorer 5.5 で動作します。

于 2013-02-15T09:56:41.560 に答える