使用 jQuery AJAX 通过 PHP 将表单数组传递给 Javascript


Passing a form array to Javascript via PHP using jQuery AJAX

我正在通过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(']'));