在jquery .serialize()之后如何处理php
好吧,不知怎的,我有最困难的时间来解决这个问题,所以我想用一个表单调用ajax,并使用jquery用.serialize()序列化它。 发送给php的数据看起来像这样
key1=value&key2=value2&key3=value3
我正在使用post请求。 它看起来很简单,但不知何故我真的很难弄清楚如何访问这些键/值对,我不能使用explode()on&因为这会给我
[0] => key1=value1 [1] => key2=value2 [2] => key3=value3
我不能在PHP中使用$ _POST [‘key1’]或$ _GET [‘key1’]来访问这些值。 我该怎么办!!! 谢谢
作为一个侧面问题,我注意到.serilize()用%0A替换换行符,用+替换白色空格,我如何用php解码这些值? 再次感谢!
编辑:
嘿,jquery代码是相当基本的:
var formSubmit = $(this).serialize(); $.post('ajax.php',{"formSubmit": "true", "formInfo": formSubmit}
如果您使用jQuery的Ajaxfunction提交表单数据,那么使用.serialize()
应该没有问题。 服务器应该自动查看和urldecode POST内容。
作为演示,请参阅以下代码:
HTML
POST Result
jQuery的
$(document).ready(function(){ $('pre').html($('#category-dynamic').serialize()); $.post("http://jfcoder.com/test/processor.php", $('#category-dynamic').serialize(), function(data){ $('pre').html($('pre').html()+"\n\n"+data); }); });
编辑
和processor.php文件内容:
编辑2
我认为您的错误是您发送内容的方式是使表单数据成为文本字符串而不是url编码的内容。
例如,你可以这样做:
var formSubmit = $(this).serialize() + "&formSubmit=true"; $.post('ajax.php', formSubmit);
而且你会有同样的效果,服务器将能够毫无意外地扩展你的POST变量。
编辑3
看这个例子:
代码是:
$(document).ready(function(){ var serial = $('#category-dynamic').serialize() + "&formSubmit=true"; $('pre').html(serial); $.post("http://jfcoder.com/test/processor.php", serial, function(data){ $('pre').html($('pre').html()+"\n\n"+data); }); });
请注意在串行数据中添加
"&formSubmit=true"
。 这从PHP页面输出:POST Result category-name=&fields%5B%5D=&fields%5B%5D=&formSubmit=true Array ( [category-name] => [fields] => Array ( [0] => [1] => ) [formSubmit] => true )
编辑4
这使用您描述的方法。 看到不同?
$(document).ready(function(){ var serial = $('#category-dynamic').serialize(); $('pre').html(serial); $.post("http://jfcoder.com/test/processor.php", {"formSubmit":"true","serial":serial}, function(data){ $('pre').html($('pre').html()+"\n\n"+data); }); });
OUTPUT
POST Result category-name=&fields%5B%5D=&fields%5B%5D= Array ( [formSubmit] => true [serial] => category-name=&fields%5B%5D=&fields%5B%5D= )
尝试在jQuery中使用json,然后在php中使用json_decode。
您的值存在于$ _POST数组的formInfo
索引中,
print_r( $_POST['formInfo'] ); echo $_POST['formInfo']['key1'];