使用Javascript xhr将对象作为参数发送

时间:2017-05-26 18:29:21

标签: javascript php jquery ajax

我有一个类似于以下结构的数组:

var data = [
    {
        'name': 'Foo'
    },
    {
        'name': 'Bar'
    }
]

我想用纯Javascript将它传递给我的PHP脚本,而不依赖于jQuery。

所以我的jQuery版本将是:

$.ajax({
    'url': '/script.php',
    'method': 'POST',
    'data': {'inscriptions': data},
    'dataType': 'json',
    'success': function(response){
        // my code for handling the response
    }
});

在Javascript中我有以下内容:

var xhr = new XMLHttpRequest();
xhr.open('POST', '/script.php', true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
xhr.send(data);
xhr.onreadystatechange = function(event){

    if(event.target.readyState != XMLHttpRequest.DONE)
        return;

    // my code for handling the response

};

但是,我遇到的问题是在Javascript中以这种方式发送,我在服务器端的$_POST是空的,因为

array(0){}

如果我将其更改为:

xhr.send(JSON.stringify({'inscriptions': data}));

然后在我的服务器端,$_POST将是:

array (size=1)
    '{"inscriptions":' => 
        array (size=1)
            '{"name":"Foo"},{"name":"Bar"}' => string '' (length=0)

当我通过jQuery发送它时,我得到以下内容:

array (size=1)
  'inscriptions' =>
    array (size=2)
      0 =>
        array (size=1)
          'name' => string 'Foo' (length=3)
      1 =>
        array (size=1)
          'name' => string 'Bar' (length=3)

有没有办法用纯Javascript实现同样的目的?

我的问题已被标记为Send JSON data from Javascript to PHP?的副本,但答案并未回答我的问题。他们正在使用一种绕过'它与:

php://input

然而,它并没有像jQuery一样直接发送到$_POST

1 个答案:

答案 0 :(得分:-1)

xhr.setRequestHeader("Content-type", "application/json")
xhr.send(JSON.stringify({'inscriptions': data}));