在 PHP 中解析一个 jquery 序列化字符串
Posted
技术标签:
【中文标题】在 PHP 中解析一个 jquery 序列化字符串【英文标题】:Parse a jquery serialize string in PHP 【发布时间】:2012-06-30 03:32:27 【问题描述】:在人们扑倒我之前,我已经看到了这个帖子:How do I php-unserialize a jQuery-serialized form?
我的问题非常相似,但我的数据却大不相同。我正在使用 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"
我的问题是:
-
关键字字段为空,即使我输入内容也是如此
当我更改内容时,标题字段不会在帖子中更改。
如何访问每个变量?标题、关键词和图片。 $_POST 也不起作用:
Yii::app()->request->getParam('imageID')
【问题讨论】:
首先live是贬值尝试委托..('body').delegate('#ajaxCaptionForm','submit', function(e) On 不起作用 bcz 你的 jquery 版本尚未实现..你可以尝试委托 我也无法让代理工作。 .live 适用于我所有其他 ajax 加载的表单。 @ubercooluk:请正确英语。谢谢。 (即没有“bcz”和“ur”)on
在 1.7 中支持。他很可能只是没有正确使用它。
【参考方案1】:
您似乎正在将序列化的表单数据(应该已经是 URL 编码的 key=values)作为 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 控制台查看正在提交的参数的完美示例。
【讨论】:
以上是关于在 PHP 中解析一个 jquery 序列化字符串的主要内容,如果未能解决你的问题,请参考以下文章
使用 jquery 解析 php 脚本返回的 JSON 字符串