-2

グーグルマップのXMLデータを取得するための検索関数を作成しています。

それに加えて、実際に見つかった結果の数を表示したいと思います。

実際のドキュメント内でエコーを実行することを考えましたが、マーカーデータが混乱する可能性があります。呼び出しが成功した後、PHP変数を取得してJqueryで取得するにはどうすればよいですか?

私のPHPが次のようになっている場合:

$result = mysql_query($query);
if (!$result) {
  die('Invalid query: ' . mysql_error());
}
$num_rows = mysql_num_rows($result);

そしてこのようなJquery:

    $.ajax({
        type: "POST",
        url: "MapSearchxml.php",
        data: {
            dataFromDate: FromDate,
            //lalala
            dataHasPatio: HasPatio
        },
        beforeSend: function (html) { // this happens before actual call
            $("#results").html('Please Wait');
            $("#searchresults").show();
            $(".phpFromDate").html(FromDate);
        },
        success: function (data, status, jqXHR) {

        //Success?
        },
        dataType: 'xml'
    });
4

4 に答える 4

1

JSONの例を試してみると、これにはエコーがありますが、複雑なことを行うことができますか?

それがあなたの後にあるかどうかわかりませんか?各変数でエコーを実行したくないと思います。JSONを使用している場合はエコーを実行しません。

<?php
$simple = 'simple string';
$complex = array('more', 'complex', 'object', array('foo', 'bar'));
?>
<script type="text/javascript">
var simple = '<?php echo $simple; ?>';
var complex = <?php echo json_encode($complex); ?>;
</script>
于 2013-01-06T00:38:43.857 に答える
1

ほら、AJAXが成功するのはhtmlコードです。<html>完全なhtmlページをAJAXすると、で始まり、で終わる、それを取り戻すことができます</html>。リターンHTMLデータに、または何かのような特別なマークを付けて、[sepcial_info : 'INFO'] それをフィルタリングすることができます。

于 2013-01-06T00:40:12.517 に答える
1

さて、あなたの質問を解読するのに少し時間が必要でした。おそらく私はまだ間違っています。試してみましょう:

あなたがやろうとしていることは、あなたが考えていることでは技術的に不可能です。つまり、1 つの Ajax リクエストを実行すると、1 つのレスポンスが返されます。関数が呼び出された時点successで、PHP スクリプトは既に存在しません。したがって、1 つの戻り値しか渡すことができません。

ただし、できることは、その戻り値をネストされたものにすることです。たとえば、2 つの部分を含みます。

  1. すでに返された XML ドキュメント
  2. カウント

それがおそらくあなたの解決策です。方法を尋ねると、カウントを名前空間の値として XML に追加し、JavaScript で処理します。

ここではコードを示していないため、簡単な例を示すことはできません (今後の質問への指針として残します)。DOMDocument属性がPHPで非常に単純であるように、名前空間要素を追加します。

于 2013-01-06T00:44:47.873 に答える
1

PHPで配列を作成してJSONを送信する方が簡単かもしれません。クライアントでは、応答オブジェクト/配列を簡単にループできます

$output=array('status'=>'', 'results'=>array());
$result = mysql_query($query);
if (!$result) {
  die('Invalid query: ' . mysql_error());
}
$num_rows = mysql_num_rows($result);

if( $num_rows){ 
  $output['status']='ok';
  /* push row data to $output['results'][]; in while loop*/
}else{
  $output['status']= 'No results';
}

echo json_encode( $output);

次にjQueryで:

success:function( data){
  if (data.status != 'No results' ){
      /* count array length*/
      var count= data.results.length;
      /* loop over data.results array*/
  }
}

/* change dataType to "json"*/

私はそれを忘れてcountjQueryに追加しました...countプロパティを$outputphp配列に追加して、使用$num_rowsして入力することもできます

于 2013-01-06T00:46:39.923 に答える