Ajax:在没有echo的情况下将PHP变量发送给JS?

时间:2014-04-08 16:32:56

标签: javascript php jquery html ajax

我对PHP和Ajax都很陌生,所以这看起来似乎微不足道,虽然我似乎无法找到明确的答案。

我正在使用ajax向process.php发送查询,然后在页面上显示结果。我所得到的一切都很好,一切都还可以:

$.ajax({
   type: "POST",
   url: "process.php",
   data: { 'data1': yada, 'data2': yadayada},
   beforeSend: function(html) {
      $("#some-div").html('<p>loading</p>');
   },
   success: function(html){
      $("#some-div").html(html);
   }
});

现在,这是有效的,因为我基本上在process.php结束时回显查询结果,然后在#some-div中显示。问题是,我还想检索PHP中处理的一些数据,以便在我的JS中使用它。但是,我不想在PHP结束时回显这些数据,因为我不想在#some-div中显示它。

换句话说,说我的process.php看起来像这样:

$var1 = "hello world";
$var2 = "It's sunny outside";
$var3 = ["key1"=>"one", "key2"=>"two", "key3"=>"three"];

$result = $var1 . $var3["key2"];
echo $result;

$ result显示在#some-div中,没关系。但是,如果我想发出一个精彩的警报();在JS中使用$ var3 [“key3”]的内容而不在#some-div中显示它

我是否应该进行另一个查询(这看起来不方便且效率低下),或者有没有办法将数据从process.php传递给JS而不回应它?

谢谢!

4 个答案:

答案 0 :(得分:2)

PHP:

echo json_encode(array(
  'html' => 'this outputs into the div',
  'other_data' => 12345,
));

JS:

$.ajax({
   type: "POST",
   url: "process.php",
   data: { 'data1': yada, 'data2': yadayada},
   beforeSend: function(html) {
      $("#some-div").html('<p>loading</p>');
   },
   success: function(data){
      $("#some-div").html(data.html);
      alert(data.other_data);
   }
});

答案 1 :(得分:2)

将数据输出为JSON,以便您可以拥有单独的部分或变量:

$response = array('result' => $result, 'otherData' => $var3);
echo json_encode($response);

使用Javascript:

$.ajax({
   type: "POST",
   url: "process.php",
   data: { 'data1': yada, 'data2': yadayada},
   dataType : 'json', // <-- tell jQuery to parse the JSON
   beforeSend: function(html) {
      $("#some-div").html('<p>loading</p>');
   },
   success: function(response){
      alert( response.otherData.key3 );
      $("#some-div").html(response.result);
   }
});

答案 2 :(得分:0)

你从成功的功能中获得了一个目标。该objet包含来自php文件的响应, 只需添加两件事。 在data:参数中,使用serialize()方法更方便。 两个:我强烈建议你从php文件中返回一个json objet。在这种情况下,您将获得一个非常容易使用的javascript objetc。

抱歉我的英语。干杯!

答案 3 :(得分:0)

所以,结论是,是的,您必须输出一些数据,或者导致您的服务器端脚本,因为当您打开与xmlhttp.open()的连接时,您基本上将结果输出到已执行脚本的浏览器。