是否可以将字符串转换为HTTP POST变量

时间:2015-08-24 04:02:35

标签: javascript php jquery ajax post

在下面的代码中,我使用.serialize()将所有表单输入编码为字符串,然后将其发布到服务器:

$.ajax({
    type: "post",
    url: wp_urls.ajax_url,
    data: {
        action: "submit_form",
        form: $("#myForm").serialize()
    }
});

我假设序列化表单字段(存储在form对象的data属性中)将成为查询字符串的参数。但是,发送到服务器的唯一参数是actionform,我的序列化字符串是form字段的值。

有没有办法将我的序列化字符串解析为HTTP POST变量,在它到达服务器之前还是有另一种方法来处理带有服务器端代码的$_POST["form"]变量?

3 个答案:

答案 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;
    }

给这个镜头。