Разбор строки jquery serialize в PHP

Прежде чем люди перепрыгнут со всех концов меня, я видел эту тему: Как мне PHP-unserialize jQuery-сериализованной формы?

Мой вопрос очень похож, но мои данные сильно отличаются. Я использую вызов AJAX для публикации, сообщения данных просто отлично (jQuery – 1,7). Форма & AJAX динамически загружается, когда пользователь нажимает на несколько ссылок и сводит к этому сценарию формы & ajax.

AJAX выглядит следующим образом: (Кстати, я знаю, что вы должны нам .on (), но я не могу заставить это работать, как я могу .live ())

$('#ajaxCaptionForm').live('submit', function(e){ e.preventDefault(); $.ajax({ 'type':'POST', 'data':{formData: $('#ajaxCaptionForm').serialize()}, 'success':function(){ parent.$.fancybox.close(); } }); }); // closing form submit 

Форма выглядит так:

 <form method="Post" action="localhost/controller" id="ajaxCaptionForm" name="ajaxCaptionForm"> <label for="Caption">Caption</label><input type="text" id="Caption" name="Caption" value="Leaf lesions."> <label for="Keywords">Keywords</label> <p>Please seperate keywords by a comma <input type="text" id="Keywords" name="Keywords" value=""></p> <input type="hidden" id="imageID" name="imageID" value="87595"> <input type="submit" value="Update Image" name="yt3" clicked="true"> </form> 

Сериализованные данные выглядят следующим образом: (согласно Firebug)

 formData=Caption%3DFruit%2Blesions.%26Keywords%3D%26imageID%3D87592 

Когда я повторяю ответ, я получаю следующее:

 "Caption=Leaf+symptoms+of+++CCDV.&Keywords=&imageID=87655" 

Мои проблемы:

  1. Поле ключевых слов пуст, даже когда я добавляю контент
  2. Поле заголовка не изменяется при публикации при изменении содержимого.
  3. Как я могу получить доступ к каждой из переменных? Подпись, ключевые слова и изображения. $ _POST не работает, ни:

    Yii :: приложение () -> request-> GetParam ( 'ImageID')

Похоже, что вы делаете сериализованные данные формы (которые уже должны быть URL-кодированными ключами = значениями), как значение в паре ключа-ключа JSON. Это то, что вы намереваетесь сделать?

От http://api.jquery.com/serialize/ обратите внимание, что данные формы, однажды отправленные через .serialize (), представляют собой текстовую строку в стандартной кодировке с кодировкой URL. "

От http://api.jquery.com/jQuery.ajax/ , обратите внимание, что параметр данных «преобразуется в строку запроса, если уже не строка».

Итак, вы берете текстовую строку в «стандартную кодировку с кодировкой URL», а затем присваиваете ей значение в паре JSON-значение ключа при настройке данных.

Я думаю, что вы могли бы быть чем-то вроде этого (игнорируйте проблему live () v. On ()):

 $('#ajaxCaptionForm').live('submit', function(e){ e.preventDefault(); $.ajax({ 'type':'POST', 'data':$('#ajaxCaptionForm').serialize(), 'success':function(){ parent.$.fancybox.close(); } }); }); // closing form submit 

Это также было бы причиной того, что вы не можете получить доступ к чему-либо, как ожидаете, поскольку все это передается под ключом formData. Вы можете сделать print_r ($ _ POST), чтобы проверить это, или echo Yii :: app () -> request-> getQueryString (); оба должны распечатать все данные, которые вы отправили в виде массива PHP, показывая вам ключи и значения.

В качестве предложения это прекрасный пример того, когда следует использовать консоль Firebug, чтобы точно определить, какие параметры отправляются.