Хорошо, у меня есть некоторые суицидальные проблемы, отправляющие строку JSON на страницу PHP. Я буквально попал в десятку лучших результатов в Google и много вопросов SO, связанных с моей проблемой, но по-прежнему не могу понять, что я делаю неправильно.Публикация строки JSON на PHP-страницу
У меня есть несколько форм на странице и вы хотите собрать все поля формы, превратить их в строку JSON и отправить их на страницу PHP, где сценарий выполняет итерацию каждого элемента и обновляет соответствующие таблицы базы данных.
Это мой JQuery/JS скрипт для сбора данных от всех форм:
вар photo_annotations = {};
$('form').each(function(i) {
var id = $(this).attr('id');
photo_annotations[id] = {
caption: $('#'+id+'_caption').val(),
keywords: $('#'+id+'_keywords').val(),
credit: $('#'+id+'_credit').val(),
credit_url: $('#'+id+'_credit_url').val()
};
});
Если я console.log
приемлю photo_annotations, это то, что производится, основываясь на два вида, например:
({11: {Надпись: "Надпись на первой фотографии", ключевые слова: «Ключевое слово1, Ключевое слово2, ключевое слово3», кредит: «Joe Bloggs», credit_url: «www.a-domain.com»}, 12: {caption: «Caption for Lady Gaga.», ключевые слова: «Ключевое слово3, ключевое слово4 », кредит:« Джон Доу », credit_url:« www.another-domain.com »}})
Затем я должен отправить это как строка/JSON на PHP страницу, так что я сделал это:
$.ajax({
type: 'POST',
dataType: 'html',
url: 'ajax/save-annotations.php',
data: { data: JSON.stringify(photo_annotations) },
contentType: "application/json; charset=utf-8",
success: function(data) {
if (data) {
$('#form_results').html(data);
} else {
alert("No data");
}
}
});
И на моей странице PHP, я получил это:
<?php
//print_r($_POST['data']);
$decoded = json_decode($_POST['data'],true);
print_r($decoded);
?>
Теперь это не единственное, что я пробовал. Я попытался удалить все настройки JSON из сценария AJAX, чтобы просто отправить чистую строку. Я попытался удалить contentType и JSON.stringify, но все равно не поеду. Моя страница PHP просто не может получить данные, которые я отправляю.
Пожалуйста, помогите подтолкнуть меня в правильном направлении. Я дошел до того, что не могу вспомнить все варианты, которые я пробовал, и этот маленький скрипт теперь на второй день!
УДАЛОСЬ FIX IT
я переписал свою функцию AJAX, и она работала. Я не знаю, что пошло не так, но решил протестировать мою функцию AJAX с помощью очень простой строки данных test=hello world
и обнаружил, что никакие данные POST не могут быть прочитаны с PHP-страницы, хотя Firebug говорит, что на самом деле страница получала сопоставление почтовых данных что я послал. Очень странно. Во всяком случае, это пересмотренная AJAX скрипт:
var the_obj = JSON.stringify(photo_annotations);
var post_data = "annotations="+the_obj;
$.ajax({
url: 'ajax/save-annotations',
type: 'POST',
data: post_data,
dataType: 'html',
success: function(data) {
$('#form_results').html(data);
}
});
Есть ли причина для HTML dataType? – Neikos
Потому что я отправляю HTML обратно со страницы PHP, когда обработка данных завершена. Это неправильно? – TheCarver
Нет, нет. Извините, неправильно прочитайте свой код. Я не понимал, что вы расшифровываете опубликованные данные. Тогда HTML будет правильным типом данных, да. – Neikos