1

在人们跳过我之前,我已经看到了这个线程:我如何 PHP 反序列化一个 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>

序列化的数据看起来像:(根据萤火虫)

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

当我回应回应时,我得到了这个:

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

我的问题是:

  1. 关键字字段为空,即使我输入内容
  2. 当我更改内容时,标题字段不会在帖子中更改。
  3. 我如何访问每个变量?标题、关键词和图片。$_POST 不起作用,也不:

    Yii::app()->request->getParam('imageID')

4

1 回答 1

1

看来您正在将序列化的表单数据(应该已经是 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 控制台查看正在提交的参数的完美示例。

于 2012-06-28T16:29:03.083 回答