在下面的代码中,我使用.serialize()
将所有表单输入编码为字符串,然后将其发布到服务器:
$.ajax({
type: "post",
url: wp_urls.ajax_url,
data: {
action: "submit_form",
form: $("#myForm").serialize()
}
});
我假设序列化表单字段(存储在form
对象的data
属性中)将成为查询字符串的参数。但是,发送到服务器的唯一参数是action
和form
,我的序列化字符串是form
字段的值。
有没有办法将我的序列化字符串解析为HTTP POST变量,在它到达服务器之前还是有另一种方法来处理带有服务器端代码的$_POST["form"]
变量?
答案 0 :(得分:0)
使用
// clean, normalize, and lowercase the string
$slug = strtolower(trim(strip_tags(stripslashes($slug))));
// replace any whitespace (tabs or even multiple spaces) with hyphens
// this is MUCH more robust than just using str_replace('-', ' ', $MyURL);
$slug = preg_replace('/\s+/', '-', $slug);
// convert punctuation or other non-alphanumeric characters to hyphens
$slug = preg_replace( '/[^a-z0-9-]/', '-', $slug );
此表单将从键值对中绑定到对象的数据中收集数据(*在html标记中提供name属性)
在ajax调用集中
data = new FormData($('#form_id).get(0)),
* processData和contentType不会根据提供的标题进行修改
答案 1 :(得分:0)
或者,您可以构建自己的data
:
var data = {};
$("#myForm").serializeArray().forEach(function(e) {
if (data[e.name] !== undefined) {
if ($.isArray(data[e.name])) {
data[e.name].push(e.value);
} else {
data[e.name] = [data[e.name], e.value];
}
} else {
data[e.name] = e.value;
}
});
data['action'] = 'submit_form';
// just to check:
console.log($.param(data));
<!-- results pane console output; see http://meta.stackexchange.com/a/242491 -->
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="myForm">
<input name="name" value="Amadan">
<input type="checkbox" name="cb" value="1" checked>1
<input type="checkbox" name="cb" value="2" checked>2
</form>
然后,您可以在data: data
中正常使用$.ajax
。如果您不希望每个参数有多个值,则可以将其简化为:
var data = {};
$("#myForm").serializeArray().forEach(function(e) { data[e.name] = e.value; });
data['action'] = 'submit_form';
// just to check:
console.log($.param(data));
<!-- results pane console output; see http://meta.stackexchange.com/a/242491 -->
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="myForm">
<input name="name" value="Amadan">
<input type="checkbox" name="cb" value="1" checked>1
</form>
答案 2 :(得分:0)
在php中使用parse_str
反序列化数据
来自PHP.net手册
解析str,好像它是通过URL传递的查询字符串,并在当前范围中设置变量。 $ str =“first = value&amp; arr [] = foo + bar&amp; arr [] = baz”;
parse_str($海峡);
echo $ first; //值
echo $ arr [0]; // foo bar
echo $ arr [1]; // baz
parse_str($ str,$ output);
echo $ output ['first']; //值
echo $ output ['arr'] [0]; // foo bar
echo $ output ['arr'] [1]; // baz
parse_str($form, $inputs);
foreach ($inputs as $key => $value) {
$_POST[$key] = $value;
}
给这个镜头。