如果input元素是一个数组,如何使用JQuery发送序列化表单数据
我的PHP代码中有这段代码:
while ($row = mysqli_fetch_assoc($result)) { extract($row); echo ""; echo "$book_id "; echo "$threat_name "; echo " "; }
在HTML页面中,我想使用jQuery serialize()方法在bookArray []中发送所选书籍的数组。 在我的JavaScript中,
var selectedbooks = $("book_form").serialize(); alert (selectedbooks);
在警报消息框中,我没有得到任何值(空字符串)。
以前当我使用Prototype时,它工作得很好。
easy: serialize().replace(/%5B%5D/g, '[]')
我想出了一种方法,当使用post发送数据时
另一方面,您可以使用$_['post']['name']
访问您的元素
如果它是一个数组(例如一个多选),那么在你的服务器上,你可以再次将它作为数组访问$_POST['myselect'][0]...
代码: 用于序列化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; }
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) { } });
jQuery的原型/ Scriptaculous序列化function:
... ...
@Tomalak你可以在XHTML中使用方括号字符“[”和“]”,参见http://www.w3.org/TR/xhtml1/dtds.html#dtdentry_xhtml1-transitional.dtd_input
所以这意味着名称可以在XHTML中合法地包含许多不同的字符,尽管使用斜杠或括号没有多大意义。 PHP支持在表单名称中使用数组表示法,因此如果在某些情况下不使用数组表示法,则可能会丢失技巧。
jQuery 1.4
var myform = $("book_form").serialize(); decodeURIComponent(myform);
正确工作jquery =>
var data = $('form').serialize(); $.post(baseUrl+'/ajax.php', {action:'saveData',data:data}, function( data ) { alert(data); });
php =>
parse_str($_POST['data'], $searcharray); echo ('
');print_r($searcharray);echo ('');
输出=>
[query] => [search_type] => 0 [motive_note] => [id_state] => 1 [sel_status] => Array ( [8] => 0 [7] => 1 )
你可以用arrays数据做任何你想做的事,感谢Aridane https://stackoverflow.com/questions/1792603
您可能需要更改PHP,因为@Tomalak建议,但您还需要更改您的JavaScript。 要引用命名元素,请使用#name选择器:
var selectedbooks = $('form#book_form').serialize();;
问题解决了! 这就是我做的。
在PHP文件内部创建动态复选框行,
while ($row = mysqli_fetch_assoc($result)) { extract($row); echo ""; echo "$book_id "; echo "$book_name "; echo " "; } // 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那样支持数组数据类型。 🙂
var data = $(form).serialize(); $.post('post.php', '&'+data);
它不是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"); } });
但是你真正需要做的就是在序列化之后将'[‘&’]’替换回自己。 因为serialize(); 将它们改为htmlencoded值!
如果您只需要发布该数组而不是其他输入字段,这是一个干净,快速的解决方案:
var selectedbooks = $('book_form input[name^="bookArray["]').serialize(); alert (selectedbooks);
阐释:
选择器^ =选择名称属性值以’bookArray’开头的所有元素,开放方括号'[‘确保元素是我们想要序列化的数组,而不仅仅是以字符串’bookArray’开头的变量。
您必须将左方括号和右方括号替换为:
data: $(this).serialize().replace(/%5B/g, '[').replace(/%5D/g, ']'),
谢谢Tomalak。
在PHP文件中,我现在使用以下代码:
while ($row = mysqli_fetch_assoc($result)) { extract($row); echo ""; echo "$book_id "; echo "$book_name "; echo " "; } // while
** book_id是独一无二的。
使用tvanfosson解决方案,现在我能够获得输入值数组
var selectedBooks = $(’form#book_form’)。serialize(); 提醒(selectedBooks);
从警报消息框中,我得到==> 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,当我做回声$ selectedBookId;
我有阵。
对于JQuery,当我做回声$ selectedBookId;
我得到==> bookArray%5B%5D = T4.11&bookArray%5B%5D = T4.38
我的问题,jQuery是否支持post方法的数组值?