1

我正在使用 jQuery 在 POST 请求中传递一个数组,但是我不明白如何使用“vanilla”javascript 做同样的事情。这是我的 jQuery:

    // Request using jQuery
$.ajax({type:'POST',url:'insert-user.php',data: {myArray: myArray},
success:function(data_response){
    console.log("jQuery, got data back, response: "+data_response);
}});

这就是我目前尝试使用普通 js 的方式:

// Request using plain js
var xmlhttp;
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
} else {// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
    if (xmlhttp.readyState==4 && xmlhttp.status==200){
        console.log("JS, got data back, response: "+xmlhttp.responseText);
    }
}
xmlhttp.open("POST","insert-user.php",true);
xmlhttp.send({myArray: myArray});
4

2 回答 2

3

用这个:

xmlhttp.send('myArray='+JSON.stringify(myArray));

在php方面,

$array= json_decode($_POST['myArray']);
于 2013-10-17T14:29:01.640 回答
2

.send()方法接受一个字符串,该字符串是要在请求中发送的 POST 数据。在 jQuery 中,该data属性允许您传递一个对象(您拥有),但在幕后,jQuery 将对象转换为键/值对格式。

这是您必须传递的格式,.send()因为它不会自动将对象转换为键/值字符串。

例如,myArray使用三个元素发送:

xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
xmlhttp.send('myArray[]=first&myArray[]=second&myArray[]=third');

请记住包含标头,以告诉服务器端您发送 POST 数据的格式。

将简单的一维数组转换为这种格式的函数可能如下所示:

function arrayToKeyValueString(name, arr){
    var str = name + '[]=';
    for(var i=0; i<arr.length; i++){
        arr[i] = encodeURIComponent(arr[i]);
    }

    str += arr.join('&' + name + '[]=');
    return str;
}

var myArray = ['one', 'two', 'three'];

console.log( arrayToKeyValueString('myArray', myArray) );
// outputs: myArray[]=one&myArray[]=two&myArray[]=three 

使用纯 Javascript ajax 时,通常只对 JSON 编码数据并发送字符串而不是尝试构建键/值字符串更容易。

xmlhttp.send('myArray=' + encodeURIComponent(JSON.stringify(myArray)));
于 2013-10-17T14:24:49.147 回答