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