#php #jquery #json #ajax
#php #jquery #json #ajax
Вопрос:
У меня есть сокращенный вызов ajax, который запускается при изменении поля выбора.
<script type'text/javascript'>
$('#selection_project').change(function(event) {
$.post('info.php', { selected: $('#selection_project option:selected').val()},
function(data) {
$('#CTN').html(data);
}
);
});
</script>
Это работает, но ответ от сервера такой:
if (isset($_POST['selected']))
$selected = $_POST['selected'];
$results['selected'] = $selected;
$response = json_encode($results);
echo $response;
$results — это ассоциативный массив со многими значениями из SQL-запроса.
Мой вопрос в том, как мне получить доступ к какому-либо конкретному элементу? Я пробовал такие вещи, как
data.selected
или,
data['selected']
Я также понимаю, что где-то в методе .post должен быть оператор, определяющий альтернативный тип данных, например
'json',
или
datatype: 'json',
но после долгих поисков ни один пример, который я смог найти, не мог предоставить фактический синтаксис использования альтернативных типов данных в методе .post .
Я бы просто использовал метод .ajax, но после того, как я вытащил свои волосы, я не могу понять, почему он не работает, и .post был, поэтому я просто придерживался его.
Если бы кто-нибудь мог немного подтолкнуть меня в правильном направлении, я был бы очень признателен!!
РЕДАКТИРОВАТЬ: вот моя попытка .ajax, не могу понять, почему она не работает. Возможно, я слишком долго смотрел на это.
<script type'text/javascript'>
$('#selection_project').change(function(event) {
$.ajax({
type: 'POST',
url : 'pvnresult.php',
data: { selected: $('#selection_project option:selected').val()},
dataType: 'json',
success: function(data){
$('#CTN').html(data);
}
});
});
</script>
Ответ №1:
Попробуйте записать, что именно возвращается из info.php . Возможно, данных вообще нетamp;
$('#selection_project').change(function(event) {
$.post('info.php', {
selected: $('#selection_project option:selected').val()},
function(data) {
console.log(data);
$('#CTN').html(data);
}
);
});
— Обновление. Извините, я не могу оставлять комментарии
Вы должны проанализировать свой json с помощью JSON.parse перед использованием:
$('#selection_project').change(function(event) {
$.post('info.php', {
selected: $('#selection_project option:selected').val()},
success: function(data){
var result = JSON.parse(data);
$('#CTN').html(data);
}
});
});
Комментарии:
1. весь массив со всеми данными отображается в элементе #CTN.
2. @LoganVoss под массивом вы подразумеваете объект? ассоциативный массив в кодировке php json станет объектом в js. по крайней мере, в форме, которую вы представили в вопросе.
3. @KevinB да, то, что отображается, в основном {«0»: {«Project_ID»:»1″, «Global_Project_Number»:»99999″ и т. Д. До тех пор, пока я не добавил «выбранный» в конец.
4. да, это объект с
"0"
ключом.foo["0"].Project_ID
5. Я понял! также спасибо @KevinB, комбинация этого ответа и вашей помощи исправила это! Я сделал JSON. ПРОАНАЛИЗИРУЙТЕ и разобрались. Еще раз спасибо!
Ответ №2:
Обратите внимание: в вашем Javascript вы выполняли:
dataType: 'json',
success: function(data){
$('#CTN').html(data);
}
Это означает, что вы ожидаете
JSON
данных, а не просто простыхHTML
.
Теперь, чтобы получить вашиJSON
данные в виде объекта,Javascript
вы могли бы сделать:
success: function(data){
if(data){
// GET THAT selected KEY
// HOWEVER, BE AWARE THAT data.selected
// MAY CONTAIN OTHER DATA-STRUCTURES LIKE ARRAYS AND/OR OBJECTS
// IN THAT CASE, TO GET THE EXACT DATA, YOU MAY JUST DO SOMETHING LIKE:
// IF OBJECT:
// $('#CTN').html(data.selected.THE_KEY_YOU_WANT_HERE);
// OR IF ARRAY:
// $('#CTN').html(data.selected['THE_KEY_YOU_WANT_HERE']);
$('#CTN').html(data.selected);
}
}
Комментарии:
1. что вы имеете в виду? Я думал, что .html похож на изменение innerhtml элемента
2. @LoganVoss Да, вы используете
.html()
для изменения innerHTML любого объекта DOM в jQuery, но это только в том случае, если вы ожидаетеHTML
строку или обычную строку. Ваш код явно требует и ожидаетJSON
, что не совпадает с обычной строкой / HTML и, следовательно, будет вести себя не так, как вы ожидали.