使用 AJAX 将表单输入发送到 PHP


Send form inputs with AJAX to PHP

我想使用 AJAX 将表单输入从页面发送到 PHP 函数,并将数据保存在多维数组中。不应重新加载页面,响应可以是简单的truefalse。在 Chrome 浏览器中,我可以在 JSON 格式的"请求有效负载"元素中看到两个输入,但是如何在 PHP 中检索数据并将这些数据转换为数组?

.HTML:

<div id="formEditBilling"><form>
<input name="register[personal][firstname]" type="text" id="firstname" value="" class="text required " placeholder="Firstname">
<input name="register[personal][lastname]" type="text" id="lastname" value="" class="text required " placeholder="Lastname">
<input type="buttom" id="editBilling" value="speichern"/></form></div>

JavaScript:

<script type="text/javascript">
$('#editBilling').click(function() {
    editBilling();
});

function editBilling(){
    var url = '/checkout/saveAddress';  // Server Function
    var data = $('#formEditBilling form').serializeArray();
    data = JSON.stringify(data);
    $.ajax({
        'type': 'post',
        'async': false,
        'data': data,
        'url': url,
        'contentType': "application/json",
        'dataType': "text",
        'success': function (result, data) {
    $('.output').html(data);    // Output Div
 }
});
}
</script>

这是我的问题。如何获得如下数组:

['register'] => Array 
    ( 
        ['personal'] => Array
                 (
                      ['firstname'] => "Michael"
                      ['lastname']  => "Cooper"
    )

PHP:这是我的尝试,但它不起作用,$_POST似乎是空的。

public function saveAddressAction(){
    $data = json_decode(stripslashes($_POST['register']));
    return true;
}

函数的括号没有正确连接,请尝试使用这个

function editBilling(){
    var url = '/checkout/saveAddress';  // Server Function
    var data = $('#formEditBilling form').serializeArray();
    data = JSON.stringify(data);
    $.ajax({
        'type': 'post',
        'async': false,
        'data': data,
        'url': url,
        'contentType': "application/json",
        'dataType': "text",
        'success': function (result, data) {
            $('.output').html(data);    // Output Div
        }
    });
}
您需要

将序列化的表单数据转换为正确的JSON

var formdata = $('#formEditBilling form').serializeArray();
var formobject = {};
$(formdata).each(function (e) {
    formobject[formdata[e].name] = formdata[e].value;
});
var data = {
    action: action,
    json: JSON.stringify(formobject)
};

使用阿贾克斯发送

function send(data) {
    var deferred = $.ajax({
        method: "post",
        url: settings.ajaxURL,
        dataType: "json",
        data: data
    });
    return deferred.promise();
}
send(formdata).done(function(response){
    console.log(response)
}

赶上 PHP

$_POST['action']
json_decode($_POST['json']);