我的大脑在编码10小时后就被炸了,所以我需要一些帮助。
我使用以下函数从表单提交中检索数据(在处理数据,验证输入等之前):
// All form fields are identified by '[id]_[name]', where 'id' is the
// identifier of the form type. Eg. brand, store etc.
// The field identifier we want to return is just the name and not the id.
public function getFormData() {
$formData = array();
foreach ($_POST as $key => $value) {
$name = preg_replace('!.*_!', '', $key);
if (is_array($value)) {
$formData[$name] = implode(',', $value);
} else {
$formData[$name] = $value;
}
}
return $formData;
}
现在我正在使用AJAX提交表单,所以我不能再使用这个功能了。
我的$ _POST ['formData']字符串看起来像这样(短版本):
"store_name=My+new+store&store_street1=Some+address&store_zipcode=1188"
我的目标是能够执行以下代码:
echo $formData['name'] //Displays 'Some address'
我的jQuery代码如下所示:
function processRegistration()
{
var formData = jQuery('#registerStore form').serialize();
jQuery.post("mypath/jquery_bll.php", { instance: 'processRegistration', formData : formData },
function(data)
{
alert('some test data here');
},"json");
如何更改我的函数以处理来自Ajax调用的数据?
答案 0 :(得分:3)
如果您使用的是$.post()
,则没有区别。这只是一个POST请求。
答案 1 :(得分:1)
我注意到你的使用:
jQuery.post("mypath/jquery_bll.php", { instance: 'processRegistration', formData : formData },
在你的代码中最有可能输出:
instance=processRegistration&formData=field1=value1&field2=value2
那么php脚本将获得的是:
$_POST = array(
'instance'=>'processRegistration',
'formData'=>'field1=value1',
'field2'=>'value2
);
编辑:这是因为序列化对象将创建一个准备发送的查询字符串,然后将其放入数据参数的对象中。
data参数接受来自jquery.fn.serialize之类的键/值对象或查询字符串
http://docs.jquery.com/Ajax/jQuery.post
所以也许你改变这一行:
jQuery.post("mypath/jquery_bll.php", { instance: 'processRegistration', formData : formData },
.. to ..
jQuery.post("mypath/jquery_bll.php", formData + '&instance=processRegistration',
会起作用
答案 2 :(得分:0)
ajax调用和来自浏览器的常规调用之间没有功能差异。
所以,回答......
$formData = getFormData();
echo $formData['name'];
答案 3 :(得分:0)
如果您愿意使用插件,可以使用这个小插件,尽管它在jquery插件库中不可用
$.params2json = function(d) {
if (d.constructor != Array) {
return d;
}
var data={};
for(var i=0;i<d.length;i++) {
if (typeof data[d[i].name] != 'undefined') {
if (data[d[i].name].constructor!= Array) {
data[d[i].name]=[data[d[i].name],d[i].value];
} else {
data[d[i].name].push(d[i].value);
}
} else {
data[d[i].name]=d[i].value;
}
}
return data;
};
您可以在插件中使用以下代码:
function processRegistration()
{
var formData = $.params2json($('#registerStore form').serializeArray());
formData.instance = 'processRegistration';
$.post('mypath/jquery_bll.php', formData,
function(data) {
alert('some test data here');
}, "json");
});
}