繁体   English   中英

Ajax-使用jQuery发送对象数组

[英]Ajax - send array of objects using jQuery

我正在从表单数据构造一个对象数组,以便发送到处理脚本,该脚本随后将数据发送到API。 该API不允许CORS ajax请求,因此需要先发送到外部脚本。

我可以返回简单的字符串,但是当我对自己拥有的数据进行字符串化时,来自服务器的响应始终是POST或GET(都尝试过)数据只是一个空数组。

JS

$('#enrol').submit(function(e) {
    e.preventDefault();

    var collection = [];

    $('#enrol .form-row').each(function() {
        var email = $(this).find('input[type="email"]').val();
        var c1Val = $(this).find('.c1').is(':checked') ? 'true' : 'false';
        var c2Val = $(this).find('.c2').is(':checked') ? 'true' : 'false';
        var c3Val = $(this).find('.c3').is(':checked') ? 'true' : 'false';
        var c4Val = $(this).find('.c4').is(':checked') ? 'true' : 'false';
        var c5Val = $(this).find('.c5').is(':checked') ? 'true' : 'false';
        var c6Val = $(this).find('.c6').is(':checked') ? 'true' : 'false';
        var c7Val = $(this).find('.c7').is(':checked') ? 'true' : 'false';

        var person = {
            'email'   : email,
            'course1' : c1Val,
            'course2' : c2Val,
            'course3' : c3Val,
            'course4' : c4Val,
            'course5' : c5Val,
            'course6' : c6Val,
            'course7' : c7Val,
        }
        collection.push(person);

    });

    var dataString = JSON.stringify(collection);

    $.ajax({
        url: 'http://www.example.com/script.php',
        data: dataString,
        crossDomain: true,
        success: function(response) {
            console.log(response);
        },
        error: function(response) {
            console.log(response);
            alert(response.responseText);
        }
    });
})

的PHP

header("Access-Control-Allow-Origin: URLHERE");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");

var_dump($_GET);

我没有得到的是,如果我只是用JSON.stringify一个简单的字符串,就得到了返回的数据,但是对象数组似乎以空数组的形式到达了php脚本-至少这就是console.log建议。 我已经输出了dataString变量以确保它具有数据-确实如此。

我自己的项目中也有类似的东西。 这对我有用:

jsonObj = new Object();
jsonObj['email'] = email;
jsonObj['course1'] = c1Val;
.
.
.

 $.ajax({
            type: 'POST',
            url: 'http://www.example.com/script.php',
            data: {"data": JSON.stringify(jsonObj)},
            dataType:'JSON',
            cache: false,
.
.
.
});

PHP:

var_dump($_REQUEST['data']);

当数据以JSON格式到达时,PHP不会自动填充超全局变量$_GET$_POST 您需要在PHP方面做两件事:

  1. 手动捕获输入
  2. JSON解码为PHP数据结构

     // capture your raw JSON $datastring = file_get_contents("php://input"); // decode it into a PHP array $collectionArray = json_decode($datastring, true); 

在jQuery方面,可能不需要以下内容,但是我将明确说明发送到服务器的内容类型:

$.ajax({
    url: 'http://www.example.com/script.php',
    data: dataString,
    contentType : "application/json",
    ...

该解决方案很简单,我没有为发布数组提供密钥-

data: dataString

本来应该

data: { data: dataString }

然后, var_dump($_GET['data'))包含我正在发送的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM