jquery传递.post上的数组键值

时间:2016-11-06 23:31:03

标签: jquery

HTML:

<input name="id" value="id" id="id">
<input name="where[abc]" value="abc">
<input name="where[xyz]" value="xyz">
<input name="something_else" value="i do not want this be included on submit">
<input type="submit" id="go">

JS

$(document).on("click", "#go", function(){
  var data = $('input[name^="where["').serialize();
  $.post("url.php", {id:$('#id').val(), where: data}, function(data){ ... })
});

如何将动态where [key] = value传递给url.php,以便在url.php上传递:

print_r($_POST['where']) will show:

[abc => abc, xyz => xyz]

需要$ _POST [where]作为数组或者json也很高兴。

它目前显示为一个字符串,我需要使用parse_str($ _ POST [&#39;其中&#39;],$ where),这看起来不是最好的方式

2 个答案:

答案 0 :(得分:0)

你实际上不必对你的JS做任何事情:只需按顺序序列化表单,让PHP脚本按预期处理指定的数组键。

对于你的JS,只需序列化表单。 $_POST['where']对象中的PHP will automatically parse the query string to return an associative array

$(document).on('click', '#go', function(){
  var d = $('input[name^="where"]').serialize();
  $.post('url.php', d, function(data){
    // Data handling
  })
});

上面的代码将提供以下查询字符串

where%5Babc%5D=abc&where%5Bxyz%5D=xyz

...这是有效的,并且将被PHP解析为使用键where标识的关联数组。

很难说明PHP代码是如何工作的,但附加的是一个用于概念验证示例的PHPfiddle链接:http://phpfiddle.org/main/code/npm1-4q5i

&#13;
&#13;
$(document).on('click', '#go', function() {
  var d = $('input[name^="where"]').serialize();
  console.log(d);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input name="where[abc]" value="abc">
<input name="where[xyz]" value="xyz">
<input type="submit" id="go">
&#13;
&#13;
&#13;

答案 1 :(得分:0)

我认为使用JQuery没有直接的方法。

这里我迭代每个输入都有name^="where["并处理以获取where[..]和每个value之间的字符串。

使用.where_values()代替.serialize()

$(document).on("click", "#go", function() {
  var data = $('input[name^="where["').where_values();
  console.log(data);
  $.post("url.php", {
    id: $('#id').val(),
    where: data
  }, function(data) {})
});

jQuery.fn.where_values = function() {
  var w = {};
  $(this).each(function() {
    var n = $(this).attr("name").split("[")[1].split("]")[0];
    var v = $(this).val();
    w[n] = v;
  });

  return w;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input name="id" value="id" id="id">
<input name="where[abc]" value="abc">
<input name="where[xyz]" value="xyz">
<input name="something_else" value="i do not want this be included on submit">
<input type="submit" id="go">