我一直在用一块砖墙砸我的头,我已经在stackoverflow上尝试了大量的解决方案,但找不到一个有效的方法!
基本上当我发布我的AJAX时,PHP返回JSON,但AJAX显示Undefined而不是值:
JS :
/* attach a submit handler to the form */
$("#group").submit(function(event) {
/* stop form from submitting normally */
event.preventDefault();
/*clear result div*/
$("#result").html('');
/* get some values from elements on the page: */
var val = $(this).serialize();
/* Send the data using post and put the results in a div */
$.ajax({
url: "inc/group.ajax.php",
type: "post",
data: val,
datatype: 'json',
success: function(data){
$('#result').html(data.status +':' + data.message);
$("#result").addClass('msg_notice');
$("#result").fadeIn(1500);
},
error:function(){
$("#result").html('There was an error updating the settings');
$("#result").addClass('msg_error');
$("#result").fadeIn(1500);
}
});
});
PHP :
$db = new DbConnector();
$db->connect();
$sql='SELECT grp.group_id, group_name, group_enabled, COUNT('.USER_TBL.'.id) AS users, grp.created, grp.updated '
.'FROM '.GROUP_TBL.' grp '
.'LEFT JOIN members USING(group_id) '
.'WHERE grp.group_id ='.$group_id.' GROUP BY grp.group_id';
$result = $db->query($sql);
$row = mysql_fetch_array($result);
$users = $row['users'];
if(!$users == '0'){
$return["json"] = json_encode($return);
echo json_encode(array('status' => 'error','message'=> 'There are users in this group'));
}else{
$sql2= 'DELETE FROM '.GROUP_TBL.' WHERE group_id='.$group_id.'';
$result = $db->query($sql2);
if(!$result){
echo json_encode(array('status' => 'error','message'=> 'The group has not been removed'));
}else{
echo json_encode(array('status' => 'success','message'=> 'The group has been removed'));
}
}
来自萤火虫的JSON结果:
{"status":"success","message":"success message"}
AJAX将JSON结果显示为Undefined,我不知道为什么。我尝试过显示添加dataType='json'
和datatype='json'
。我也尝试将其更改为data.status
和data['status']
:但仍然没有喜悦。
任何帮助都会非常感激。
答案 0 :(得分:43)
将其设为dataType
而不是datatype
。
并在php中添加以下代码,因为你的ajax请求期望json并且不会接受任何内容,但是json。
header('Content-Type: application/json');
Correct Content type for JSON and JSONP
firebug中可见的响应是文本数据。检查响应头的Content-Type
以验证响应是否为json。 application/json
应为dataType:'json'
,text/html
为dataType:'html'
。
答案 1 :(得分:4)
我建议您使用:
var returnedData = JSON.parse(data);
将JSON字符串(如果它只是文本)转换为JavaScript对象。
答案 2 :(得分:3)
使用parseJSON jquery方法将字符串转换为对象
var objData = jQuery.parseJSON(data);
现在你可以编写代码
了$('#result').html(objData .status +':' + objData .message);
答案 3 :(得分:2)
尝试从服务器发送内容类型标头,在回显之前使用它
header('Content-Type: application/json');
答案 4 :(得分:1)
您的数据类型错误,请更改dataType的数据类型。