我正在通过AJAX
提交表单并利用jQuery
,我需要了解如何将form arrays
传递给它。
例如,我的 html 是这样的:
<input id="standard_field" type="text" name="standard_name">
<input id="some_id_1" type="text" name="my_array[my_name_1]">
<input id="some_id_2" type="text" name="my_array[my_name_2]">
<input id="some_id_3" type="text" name="my_array[my_name_3]">
现在我知道您可以使用以下内容轻松获取 jQuery 中标准字段的名称:
var foo = $('standard_field').val();
但是我不确定如何获取数组数据?此外,它需要从 ajax 传递给 PHP 脚本,就像 PHP 脚本获取它的方式与在没有 ajax 的情况下提交表单一样。
因此,我通常如何传递数据的示例:
var foo = $('standard_field').val();
var loadUrl = "some_script.php";
var dataObject = { foo: foo };
getAjaxData(loadUrl, dataObject, 'POST', 'json')
.done(function(response) {
//..........
})
.fail(function() {
//......
});
// End
function getAjaxData(loadUrl, dataObject, action, type) {
return jQuery.ajax({
type: action,
url: loadUrl,
data: dataObject,
dataType: type
});
}
因此,首先,我如何从表单中获取要传递的数据,其次如何将其从jQuery传递到PHP脚本,以便PHP将其作为数组获取,就像直接发布到PHP脚本一样?
你应该使用serialize
.HTML:
<form id="form1" action="" method="post">
<input id="standard_field" type="text" name="standard_name">
<input id="some_id_1" type="text" name="my_array[my_name_1]">
<input id="some_id_2" type="text" name="my_array[my_name_2]">
<input id="some_id_3" type="text" name="my_array[my_name_3]">
</form>
.JS:
var dataObject = $('#form1').serialize();
var loadUrl = "some_script.php";
getAjaxData(loadUrl, dataObject, 'POST', 'json')
.done(function(response) {
//..........
})
.fail(function() {
//......
});
// End
function getAjaxData(loadUrl, dataObject, action, type) {
return jQuery.ajax({
type: action,
url: loadUrl,
data: dataObject,
dataType: type
});
}
您可以使用此插件 http://malsup.com/jquery/form/
示例代码:
.JS:
$('#your_button').change(function() {
var options = {
url: 'your_url',
type: 'POST',
dataType: 'json',
beforeSubmit: function() {
// Callback function to be invoked before the form is submitted
},
success: function(data) {
// Callback function to be invoked after the form has been submitted
},
error: function() {
// Callback function to be invoked upon error
}
};
// do something
});
.PHP:
var_dump($_POST);
可以使用 String.slice 方法提取标签名称。
var input = $('#myform input');
var data = [];
var name, label, value = '';
for(var i in input) {
name = input.eq(i).attr('name');
label = name.splice(9, -1);
value = input.eq(i).val();
data[label] = value;
}
data = JSON.stringify(data);
为了检测它何时是一个数组,你可以使用 String.indexOf('[')
对于未知的数组结构:
array_name = name.splice(0, name.indexOf('['));
label = name.splice(name.indexOf('['), name.indexOf(']'));