JQuery AJAX Call to PHP скрипт с возвратом JSON
Я разбил себе голову о кирпичную стену с этим, я пробовал множество решений в stackoverflow, но не могу найти тот, который работает!
В основном, когда я POST мой 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 Результат от firebug:
{"status":"success","message":"success message"}
AJAX Отображает результат JSON как Undefined, и я не знаю, почему. Я попытался показать добавление dataType='json'
и dataType='json'
. Я также попробовал изменить его на data.status
и data['status']
: до сих пор нет радости.
Любая помощь будет действительно оценена.
Ответы
Ответ 1
Сделайте dataType
вместо dataType
.
И добавьте ниже код в php, поскольку ваш запрос ajax ожидает json и ничего не примет, но json.
header('Content-Type: application/json');
Исправить тип контента для JSON и JSONP
Ответ, видимый в firebug, - это текстовые данные. Проверьте Content-Type
заголовка ответа, чтобы проверить, является ли ответ json. Он должен быть application/json
для dataType:'json'
и text/html
для dataType:'html'
.
Ответ 2
попробуйте отправить заголовок типа контента с сервера, используя это прямо перед тем, как эхо
header('Content-Type: application/json');
Ответ 3
Я рекомендую вам использовать:
var returnedData = JSON.parse(data);
для преобразования строки JSON (если это просто текст) для объекта JavaScript.
Ответ 4
Использовать метод jquery parseJSON для скрытой строки в объект
var objData = jQuery.parseJSON(data);
Теперь вы можете написать код
$('#result').html(objData .status +':' + objData .message);
Ответ 5
Ваш тип данных неверен, измените тип данных для типа данных.