序列化jquery帖子看起来像普通表单提交

时间:2016-12-15 17:38:34

标签: javascript jquery

我必须将jquery .post与php脚本集成,该脚本要求字段名称为$ _POST数组键,如$ _POST ['field_name']。如果我写出像这样的键值对

示例1:

$.post("http://localhost/post_handler", {
    'foo' : 'bar' //<- key value pair
    },
    function(data, status){
        console.log(data);
    },
    'json'
);

它发布完美,意味着$ _POST ['foo'] ='bar'。不幸的是,有数百个字段,我不能写出来。如果我试试

示例2:

var post =  $("form").serialize();
$.post("http://localhost/post_handler", {
    post
    },
    function(data, status){
        console.log(data);
    },
    'json'
);

后端有类似的东西:

  $_POST['post'] = 'field1=1&field2=2&field3=3'

我必须拆分后端的字段。

对于这个项目,我无法访问后面的内容,无法控制服务器对帖子的操作。我需要后端来处理这个像普通表单提交一样。同样,我有数百个字段,所以我不想像示例1那样写出来。

我可以做一个循环,但我认为必须有一个内置的方法来做到这一点。

3 个答案:

答案 0 :(得分:1)

你的第二个例子几乎是正确的,你只需要将post变量直接传递给$.post的第二个参数,即。没有包裹在{}中。试试这个:

var post = $("form").serialize();
$.post("http://localhost/post_handler", post, function(data, status) {
    console.log(data);
}, 'json');

答案 1 :(得分:1)

正如我所评论的

  

在示例2中,post var位于对象({})内,直接传递:$ .post(url,post,function,&#39; json&#39;);

&#13;
&#13;
var post =  $("form").serialize();
$.post("http://localhost/post_handler", post,
    function(data, status){
        console.log(data);
    },
    'json'
);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<form>
  <input type="text" name="i1" value="v1">
  <input type="text" name="i2" value="v2">
</form>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

删除post变量周围的花括号应该给你你期望的结果...花括号只会包围post()语句的数据部分如果你将名称/值对分解为JS对象( ie ... {element:value,element2:value2}。

$ .serialize()返回一个字符串而不是一个对象(http://api.jquery.com/serialize/)-,所以简单地传递它而不使它成为一个对象......

var post =  $("form").serialize();
$.post("http://localhost/post_handler", post ,
    function(data, status){
        console.log(data);
    },
    'json'
);