如何发送PHP变量并使用Jquery(没有echo)检索它们?

时间:2013-01-06 00:34:02

标签: php jquery

我正在构建一个搜索功能来检索谷歌地图的XML数据。

除此之外,我想显示实际找到的结果数量。

我想过在实际文档中做一个echo,但是这可能会弄乱我的标记数据。在成功调用后,我如何获取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 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

你知道,AJAX成功的是一个HTML代码。如果你是AJAX一个完整的html页面,你会得到它,从<html>开始到</html>结束。你可以在返回的html数据上做一个特殊的标记,比如[sepcial_info : 'INFO']或somthing,然后只是过滤它。

答案 2 :(得分:1)

好的,我需要一些解释你的问题,可能我还是错的,让我们试试:

您尝试做的事情在技术上并不可能与您的想法有关。简而言之:如果您执行一个Ajax请求,则返回一个响应。调用success函数的那一刻,您的PHP脚本已经消失。所以你只能传递一个返回值。

但是,您可以做的是,您将该返回值设为嵌套值,例如包含两部分:

  1. 您已返回的XML文档
  2. 计数
  3. 这可能是你的解决方案。如果你问如何,我会将计数作为命名空间值添加到XML中,然后使用javascript处理它。

    由于你没有在这里显示任何代码,我不能给出一个快速的例子(我将其留作未来问题的指针)。添加一个名称空间元素,就像PHP中的DOMDocument非常简单一样。

答案 3 :(得分: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"*/

我忘记了count并将其添加到jQuery中...还可以向count php数组添加$output属性并使用$num_rows填充