我有一个带有javascript函数的HTML页面:
<script type="text/javascript">
/* <![CDATA[ */
function voteCounter(messageID)
{
$.get("./_vote/counter_ajax.php?messageID="+messageID, function(data){
alert(data);
});
}
/* ]]> */
</script>
我的PHP文件&#39; counter_ajax.php&#39;:
<?php
require "../lib/config.php";
$STB = $config['dbTableNames']['votes'];
$DBServer = $config['dbConnection']['host'];
$DBUser = $config['dbConnection']['user'];
$DBPass = $config['dbConnection']['pass'];
$DBName = $config['dbConnection']['name'];
$messageID = $_GET['messageID'];
$db = new mysqli($DBServer, $DBUser, $DBPass, $DBName);
$resultUp = $db->query("SELECT SUM(voteUp) AS voteUp FROM $STB WHERE messageID = '$messageID'")->fetch_object()->voteUp;
$resultDown = $db->query("SELECT SUM(voteDown) AS voteDown FROM $STB WHERE messageID = '$messageID'")->fetch_object()->voteDown;
echo json_encode("Positive: " . $resultUp . " .... Negative: " . $resultDown);
?>
如果我在浏览器中运行PHP文件正在运行,结果将填充文本和变量:
正面:3 ..负面:2
但警告框中的HTML响应是这样的,没有变量:
正面:..否定:
什么是正确的方法?
答案 0 :(得分:1)
鉴于你的php输出是json,数据变量将是json对象而alert不会将数据对象转换为字符串。试试这个:
<script type="text/javascript">
/* <![CDATA[ */
function voteCounter(messageID)
{
$.get("./_vote/counter_ajax.php?messageID="+messageID, function(data){
alert(data.Positive);
});
}
/* ]]> */
</script>
答案 1 :(得分:1)
JQuery Ajax函数用于根据服务器在响应头中发送的mine类型/内容类型来识别响应类型(html,json,xml等)。
在您的情况下,您没有设置任何内容类型,因此JQuery函数无法找出json响应。
在PHP方面你可以这样做:
$data = /** whatever you're serializing **/;
header('Content-Type: application/json');
echo json_encode($data);
或者在jQuery端你可以使用 jQuery.getJSON(),它总是假设服务器响应是在json中。
jQuery.get()中还有一个选项可以在第四个参数中设置数据类型,如:
jQuery.get( url [, data ] [, success ] [, dataType ] )