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

时间:2014-11-25 07:08:58

标签: javascript php jquery arrays 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将其作为一个数组,就像它直接POST到PHP脚本一样?

3 个答案:

答案 0 :(得分:2)

您应该使用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
    });    

}

答案 1 :(得分:1)

您可以使用此插件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);

答案 2 :(得分:1)

您可以使用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(&#39; [&#39;)喜欢

对于未知的数组结构:

array_name = name.splice(0, name.indexOf('['));
label = name.splice(name.indexOf('['), name.indexOf(']'));