我对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而不回应它?
谢谢!
答案 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()的连接时,您基本上将结果输出到已执行脚本的浏览器。