我在PHP代码中有这段代码:
while ($row = mysqli_fetch_assoc($result))
{
extract($row);
echo "<tr>";
echo "<td bgcolor='#FFFFFF'><input id='bookArray[]' name='bookArray[]' type='checkbox' value='$book_id' />$book_id</td>";
echo "<td bgcolor='#FFFFFF'>$threat_name</td>";
echo "</tr>";
}
在HTML页面中,我想使用jQuery serialize()方法在bookArray []中发送所选书籍的数组。在我的JavaScript中,
var selectedbooks = $("book_form").serialize();
alert (selectedbooks);
在警告消息框中,我没有得到任何值(空字符串)。
以前当我使用Prototype时,它运作良好。
答案 0 :(得分:22)
简单:serialize().replace(/%5B%5D/g, '[]')
答案 1 :(得分:9)
我提出了一种方法,当使用post
发送数据时 另一方面,可让您使用$_['post']['name']
如果它是一个数组(例如多选),那么在您的服务器上,您可以再次将其作为数组访问$_POST['myselect'][0]...
代码: Function to serialize form data for post
function serializePost(form) {
var data = {};
form = $(form).serializeArray();
for (var i = form.length; i--;) {
var name = form[i].name;
var value = form[i].value;
var index = name.indexOf('[]');
if (index > -1) {
name = name.substring(0, index);
if (!(name in data)) {
data[name] = [];
}
data[name].push(value);
}
else
data[name] = value;
}
return data;
}
答案 2 :(得分:2)
var arTags = new Array();
jQuery.map( $("input[name='tags[]']") , function(obj,index)
{
arTags .push($(obj).val());
});
var obj = {'new_tags' : $("#interest").val() ,
'allready_tags[]' : arTags };
var post_data = jQuery.param(obj,true);
$.ajax({
type : 'POST',
url : 'some_url',
data : post_data,
dataType : "html",
success: function(htmlResponse)
{
}
});
答案 3 :(得分:1)
jQuery的原型/ Scriptaculous序列化功能:
<script>
function toObjectMap( queryString )
{
return '{\'' + queryString.replace(/=/g, '\':\'').replace(/&/g, '\',\'') + '\'}';
}
</script>
...
<div id="result"></div>
...
<form onSubmit="$('#result').load( ajaxURL, toObjectMap( $('#formId').serialize() ) );" ...>
...
答案 4 :(得分:1)
@Tomalak 您可以在XHTML中使用方括号字符“[”和“]” 看到 http://www.w3.org/TR/xhtml1/dtds.html#dtdentry_xhtml1-transitional.dtd_input
所以这意味着名称可以在XHTML中合法地包含许多不同的字符,尽管使用斜杠或括号没有多大意义。 PHP支持在表单名称中使用数组表示法,因此如果在某些情况下不使用数组表示法,则可能会丢失技巧。
答案 5 :(得分:1)
jQuery 1.4
var myform = $("book_form").serialize();
decodeURIComponent(myform);
答案 6 :(得分:1)
正常工作 jquery =&gt;
var data = $('form').serialize();
$.post(baseUrl+'/ajax.php',
{action:'saveData',data:data},
function( data ) {
alert(data);
});
php =&gt;
parse_str($_POST['data'], $searcharray);
echo ('<PRE>');print_r($searcharray);echo ('</PRE>');
output =&gt;
[query] =>
[search_type] => 0
[motive_note] =>
[id_state] => 1
[sel_status] => Array
(
[8] => 0
[7] => 1
)
你可以用数组数据做任何你想做的事情, 感谢Aridane https://stackoverflow.com/questions/1792603
答案 7 :(得分:0)
您可能需要更改PHP,因为@Tomalak建议,但您还需要更改您的JavaScript。要引用命名元素,请使用#name选择器:
var selectedbooks = $('form#book_form').serialize();;
答案 8 :(得分:0)
感谢Tomalak。
在PHP文件中,我现在使用以下代码:
while ($row = mysqli_fetch_assoc($result)) {
extract($row);
echo "<tr>";
echo "<td bgcolor='#FFFFFF'><input id='$book_id' name='bookArray[]' type='checkbox' value='$book_id' />$book_id</td>";
echo "<td bgcolor='#FFFFFF'>$book_name</td>";
echo "</tr>";
} // while
** book_id是独一无二的。
使用tvanfosson解决方案,现在我可以获得输入值数组
var selectedBooks = $('form#book_form')。serialize(); alert(selectedBooks);
在提醒消息框中,我得到==&gt; bookArray%5B%5D = T2.05&安培; bookArray%5B%5D = T2.81
现在,当我使用JQuery将序列化输入值发送到PHP文件时
var selectedBooks = $('form#book_form').serialize();
alert (selectedBooks);
var url = 'saveBookList.php';
// Send to server using JQuery
$.post(url, {bookArray: selectedBooks}, function(responseData) {
$("#save-result").text(responseData);
});
在saveBookList.php里面处理序列化表单,我收到了这个错误 “为foreach()提供的参数无效”。
在saveBookList.php中,
// If you have selected from list box.
if(isset($_POST['bookArray'])) {
// Get array or bookID selected by user
$selectedBookId = $_POST['bookArray'];
echo $selectedBookId;
foreach($selectedBookId as $selectListItem) {
echo "You sent this -->" . $selectListItem . "\n";
}
}
如果我使用Prototype发送,上面的PHP代码工作正常。
对于Prototype,当我这样做 echo $ selectedBookId;
我得到了数组。
对于JQuery,当我这样做 echo $ selectedBookId;
我得到==&gt; bookArray%5B%5D = T4.11&安培; bookArray%5B%5D = T4.38
我的问题,jQuery是否支持post方法的数组值?
答案 9 :(得分:0)
问题解决了!这就是我所做的。
在PHP文件中创建动态复选框行,
while ($row = mysqli_fetch_assoc($result))
{
extract($row);
echo "<tr>";
echo "<td bgcolor='#FFFFFF'><input name='books' type='checkbox' value='$book_id' />$book_id</td>";
echo "<td bgcolor='#FFFFFF'>$book_name</td>";
echo "</tr>";
} // while
我不再使用JQuery $ .post方法了。我将代码更改为以下
var my_query_str = '';
$("input[@type='checkbox'][@name='books']").each(
function()
{
if(this.checked)
{
my_query_str += "&bookArray[]=" + this.value;
}
});
$.ajax(
{
type: "POST",
url: "saveBookList.php",
data: "dummy_data=a" + my_query_str,
success:
function(responseData)
{
$("#save-result").empty().append(responseData);
},
error:
function()
{
$("#save-result").append("An error occured during processing");
}
});
现在,在saveBookList.php页面中,$ _POST ['bookArray']的值是一个数组。 Yey! Yey!
我希望并希望JQuery的$ .post方法可以像Prototype那样支持数组数据类型。 :)
答案 10 :(得分:0)
var data = $(form).serialize();
$.post('post.php', '&'+data);
答案 11 :(得分:0)
这不是jQuery Post的问题,它是序列化你可以这样做:
var my_query_str = '';
$("input[@type='checkbox'][@name='books']").each( function() {
if(this.checked) { my_query_str += "&bookArray[]=" + this.value; }
});
jQuery.post(
"saveBookList.php",
"dummy_data=a" + my_query_str ,
function(responseData){
$("#save-result").empty().append(responseData);
},
error: function() {
$("#save-result").append("An error occured during processing");
}
});
但你真正需要做的就是替换'['&amp; '''序列化后回到自己身边。因为serialize();将它们改为htmlencoded值!
答案 12 :(得分:0)
如果您只需要发布该数组而不是其他输入字段,这是一个干净而快速的解决方案:
var selectedbooks = $('book_form input[name^="bookArray["]').serialize();
alert (selectedbooks);
阐释:
选择器^ =选择名称属性值以&#39; bookArray&#39;开放方括号&#39; [&#39;确保元素是我们想要序列化的数组,而不仅仅是以字符串&#39; bookArray&#39;开头的变量。
答案 13 :(得分:0)
您必须将左方括号和右方括号替换为:
data: $(this).serialize().replace(/%5B/g, '[').replace(/%5D/g, ']'),