Javascript post的jQuery.serialize()?
我正在通过包含表单变量的post执行ajax请求 ajax请求的数据如下所示Javascript post的jQuery.serialize()?,javascript,jquery,forms,post,Javascript,Jquery,Forms,Post,我正在通过包含表单变量的post执行ajax请求 ajax请求的数据如下所示 data : { somevar1: 'someval1', somevar2: 'someval2', somevar3: 'someval3', somevar4: 'someval4', form: FORMDATA } 正如您所看到的,除了基本表单数据之外,我还传递了一些其他数据 这意味着我不能使用jquery.serialize() 我想最终得到一些我可以发送的东西,所以在另一边
data : {
somevar1: 'someval1',
somevar2: 'someval2',
somevar3: 'someval3',
somevar4: 'someval4',
form: FORMDATA
}
正如您所看到的,除了基本表单数据之外,我还传递了一些其他数据
这意味着我不能使用jquery.serialize()
我想最终得到一些我可以发送的东西,所以在另一边我可以做
$\u POST['form']['fieldname']
是否有内置函数来执行此操作
或者我需要做什么来创建一个
在窗体上运行函数的可能性
function postArray(form){
var data = {};
var name, value = null;
$(form).children('textarea, input, select'){
name = this.name;
data.name = $(this).val();
}
return data;
}
这张表格可以用
有
data : {
somevar1: 'someval1',
somevar2: 'someval2',
somevar3: 'someval3',
somevar4: 'someval4',
form: postArray(form)
}
这样行吗
我可以使用
.serializeArray()代码>
但另一方面,我得到了
Array
(
[0] => Array
(
[name] => name1
[value] => val1
),
[1] => Array
(
[name] => name2
[value] => val2
)
...
[8] => Array
(
[name] => name8
[value] => val8
)
)
这很接近,但这需要我
a:在数组上循环并将其转换为我想要的
b:每次我使用它来循环查找正确的键时,您都可以使用and将表单数据编码为JSON
serializeArray
提供如下数组:
[
{
name: a
value: 1
},
{
name: b
value: 2
}
]
因此,您将无法使用$data['fieldname']
访问服务器端的数据。要将数组转换为对象(以便您可以像您想访问的那样访问数据),请查看
当然,您也可以只使用自己的函数(如果您修复了错误,它似乎会执行类似的操作),但您仍然必须使用JSON.stringify
:
data : {
somevar1: 'someval1',
somevar2: 'someval2',
somevar3: 'someval3',
somevar4: 'someval4',
form: JSON.stringify(postArray(form))
}
然后,在PHP脚本中,可以使用获取表单数据:
$form_data = json_decode($_POST['form']);
——“这是一个固定版本(根据您的评论进行更新,不要在
中为…使用来循环数组):
如果要修复名称中包含[]
的元素,必须手动处理这些元素并将其放入数组中:
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;
}
}
但这假设您没有像字段
和字段[]
这样的字段名,请尝试以下操作:
Try This:
<?php
/*
* As a Class File your-class-file.php
* Decode jQuery Serialize Post String For PHP
*/
class PHP_Serialize {
function Decode_Serialize($QUERY_STRING) {
/*
* Decode form.serelize() jQuery Post String
* Return like $_POST['Form_Input_Name or ID']
*/
$a = explode('&', $QUERY_STRING);
$i = 0;
$store = array();
while ($i < count($a)) {
$b = explode('=', $a[$i]);
$array_name = htmlspecialchars(urldecode($b[0]));
$array_value = htmlspecialchars(urldecode($b[1]));
$store[$array_name] = $array_value;
$i++;
}
/*
* Convert Array as an Object
* return(object)$store;
* Use ........Object->Form_Input_Name or ID
* or
* Use as An Array .........$var["Form_Input_Name or ID"]
*/
return $store;
}
}
?>
<?php
/*
* How to USE:
* In Your PHP File (your-file.php)
* Include Class File like include('your-class-file.php');
* $Decode = new PHP_Serialize();
* Use Function Like This $_POST = $Decode->Decode_Serialize($_POST['Query_String']);
*/
/*
* Demo HERE
* you-file.php
*/
include('your-class-file.php');
$Decode = new PHP_Serialize();
$_POST = $Decode->Decode_Serialize($_POST['Query_String']);
/* Decode jQuery Serlize String AS a PHP Function if you not making Class file */
$_POST = Decode_Serialize($_POST['Query_String']);
/* Use POST String in your mySQL Statement Like This*/
mysql_query("SELECT * FROM Table WHERE COMPANY_NAME = '".$_POST['COMPANY_NAME']."'");
/*
* Here is Your form PHP File
*/
?>
<form action="" method="post" id="your-form-id" name="your-form-id">
<label for="COMPANY_NAME">Company Name:</label>
<input type="text" name="COMPANY_NAME" id="COMPANY_NAME"/>
<label for="COMPANY_EMAIL">Company Email:</label>
<input type="text" name="COMPANY_EMAIL" id="COMPANY_EMAIL"/>
<input type="button" name="submit" id="submit" value="submit"/>
</form>
<script>
$(document).ready(function() {
$('#submit').click(function(){
var Post_String = $('#your-form-id').serialize();
$.ajax({
type : 'POST',
url : 'your-file.php',
data : {Query_String:Post_String},
success : function(return_value){/* On Success you jQuery Code Here*/}
});
});
});
</script>
因为,在另一方面,当执行print\u r($\u POST['form'])时,我会返回看起来应该是get字符串的内容。虽然我可以在服务器端对此进行分解,但我不希望。您的额外变量是通过js计算的还是与页面一起提供的?对于页面(是的,我知道我可以始终将它们设置为隐藏输入,但是表单是通过ajax生成的,并且根据具体情况而有所不同)干杯,再次出现细微变化:函数postArray(form){var data={};form=$(form).serializeArray();for(form中的var i)data[form[i].name]=form[i].value;return data;}
我想如果可以,为什么不使用jQuerys内置函数呢?请随时用此更新您的答案,我会删除注释。嗯,效果很好,但如果我在控制台中输入:$('[name=keywords[]]')。val()
输出是$('[“什么”,“另一个”]
,这很好,但是当我在服务器上打印结果时,我得到[type]=>电子邮件[keywords[]=>另一个
,作为pre的输出,我如何修复它?希望得到[type]=email[keywords]=>数组(什么,另一个)
或类似的东西
Try This:
<?php
/*
* As a Class File your-class-file.php
* Decode jQuery Serialize Post String For PHP
*/
class PHP_Serialize {
function Decode_Serialize($QUERY_STRING) {
/*
* Decode form.serelize() jQuery Post String
* Return like $_POST['Form_Input_Name or ID']
*/
$a = explode('&', $QUERY_STRING);
$i = 0;
$store = array();
while ($i < count($a)) {
$b = explode('=', $a[$i]);
$array_name = htmlspecialchars(urldecode($b[0]));
$array_value = htmlspecialchars(urldecode($b[1]));
$store[$array_name] = $array_value;
$i++;
}
/*
* Convert Array as an Object
* return(object)$store;
* Use ........Object->Form_Input_Name or ID
* or
* Use as An Array .........$var["Form_Input_Name or ID"]
*/
return $store;
}
}
?>
<?php
/*
* How to USE:
* In Your PHP File (your-file.php)
* Include Class File like include('your-class-file.php');
* $Decode = new PHP_Serialize();
* Use Function Like This $_POST = $Decode->Decode_Serialize($_POST['Query_String']);
*/
/*
* Demo HERE
* you-file.php
*/
include('your-class-file.php');
$Decode = new PHP_Serialize();
$_POST = $Decode->Decode_Serialize($_POST['Query_String']);
/* Decode jQuery Serlize String AS a PHP Function if you not making Class file */
$_POST = Decode_Serialize($_POST['Query_String']);
/* Use POST String in your mySQL Statement Like This*/
mysql_query("SELECT * FROM Table WHERE COMPANY_NAME = '".$_POST['COMPANY_NAME']."'");
/*
* Here is Your form PHP File
*/
?>
<form action="" method="post" id="your-form-id" name="your-form-id">
<label for="COMPANY_NAME">Company Name:</label>
<input type="text" name="COMPANY_NAME" id="COMPANY_NAME"/>
<label for="COMPANY_EMAIL">Company Email:</label>
<input type="text" name="COMPANY_EMAIL" id="COMPANY_EMAIL"/>
<input type="button" name="submit" id="submit" value="submit"/>
</form>
<script>
$(document).ready(function() {
$('#submit').click(function(){
var Post_String = $('#your-form-id').serialize();
$.ajax({
type : 'POST',
url : 'your-file.php',
data : {Query_String:Post_String},
success : function(return_value){/* On Success you jQuery Code Here*/}
});
});
});
</script>