我真的不知道我在这里缺少什么。我有这个脚本:
<script type="text/javascript">
function ServiceOffer(){
var service_name = $('#service_name').val(),
dataString = "service=" + service_name;
$.ajax({
type: "POST",
url: "posted.php",
data:dataString,
success:function(data){
console.log(data);
}
});
}
$(document).ready(function(){
ServiceOffer();
$(document).on('change','#service_name',function(){
ServiceOffer();
});
});
</script>
这是posted.php
<?php
$connect = mysql_connect('localhost','root','') or die('Unable to connect'.mysql_error());
$select = mysql_select_db('hcs',$connect) or die('Unable to select database'.mysql_error());
$service = $_POST['service'];
$query = mysql_query("SELECT * FROM serviceoffer WHERE servicename = '$service'");
$num = mysql_num_rows($query);
while($rows = mysql_fetch_array($query)){
$data[] = $rows;
}
echo json_encode($data);
那么我错过了什么?我不认为我的代码中附加了一个字符串,它在我的控制台中提供了字符串而不是json编码数据。请帮忙!谢谢!
编辑:这是我的控制台中返回的数据。
答案 0 :(得分:3)
您有三种选择:
dataType: 'json'
添加到$.ajax
。header("Content-type: application/json");
添加到PHP代码中。console.log($.parseJSON(data))
。请注意,如果您还使用了选项1或2,则不应使用选项3.jQuery会在前两种情况下自动解析JSON,并且您将尝试解析结果,而不是工作
答案 1 :(得分:2)
至少应该在PHP中发送适当的标头,例如
header('Content-type: application/json');
echo json_encode($data);
exit;
您还可以在jQuery的dataType
方法中设置$.ajax
以指定预期的响应类型。我还发现将请求参数作为对象文字发送更容易(节省了必须构建URL编码的字符串),例如
$.ajax({
type: 'POST',
dataType: 'json',
data: { service: service_name },
//etc
提到shirejedi时,您应该将$data
初始化为数组
$data = array();
while($rows = mysql_fetch_array($query)){
$data[] = $rows;
}