我在失败中学习Ajax,但遇到了困难:
我有一个用Javascript编写的数组(如果重要的话,该数组根据用户选中的复选框来存储数字id)。
我有一个函数,当用户点击“保存”按钮时会调用这个函数。函数如下:
function createAmenities() {
if (window.XMLHttpRequest) {
//code for IE7+, Firefox, Chrome and Opera
xmlhttp = new XMLHttpRequest();
}
else {
//code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById('message').innerHTML = xmlhttp.responseText;
}
}
var url = "create_amenities.php";
xmlhttp.open("GET", url, true);
xmlhttp.send();
}
我的问题是:我可以在这个函数中放入什么来将数组拉入我试图调用的php脚本('create_amenities.php')?
此外,我应该尝试使用JSON吗?如果是这样,我如何通过ajax发送JSON对象?
提前谢谢。
发布于 2011-08-04 15:04:29
如果你的数组有一维以上或者是一个关联数组,你应该使用JSON。
Json将一个完整的数组结构转换为一个字符串。这个字符串可以很容易地发送到您的php应用程序,并转换回一个php数组。
更多关于json的信息:http://www.json.org/js.html
var my_array = { ... };
var json = JSON.stringify( my_array );
在php中,你可以用json_decode解码这个字符串:
http://www.php.net/manual/en/function.json-decode.php
var_dump(json_decode($json));
发布于 2011-08-04 15:01:54
循环遍历数组,并每次将encodeURIComponent('keyname[]') + '=' + encodeURIComponent(theArray[i]) + '&'
附加到查询字符串。
此外,我应该尝试使用
吗?
可以,但这意味着在另一端解码JSON,而不是让正常的表单处理来处理它。
如果是这样的话,我如何通过ajax发送
对象?
这就是no such thing as a JSON object。JSON采用字符串的形式,您可以在查询字符串中包含字符串(只需记住encodeURIComponent
)。
发布于 2021-09-26 10:09:48
我发现这个问题对Javascript爱好者很有用。
发送一个javascript对象,不管是js数组还是js对象,你必须在把它放到服务器上进行解码和处理之前对设置进行字符串转换。
限定js对象:基于你的函数:
Javascript Array对象的大小写
let my_array = ["select1", "select2", "..."];
my_array = JSON.stringify(my_array);
Javascript对象对象的大小写
let my_obj = {
name: "Daniel",
age: 23,
location: "Nigeria"
}
my_obj = JSON.stringify(my_obj);
在点上,你可以把它推送到服务器,根据用例,你正在使用AJAX GET方法将你的字符串对象发送到服务器。
下面是完整的代码:
function createAmenities() {
if (window.XMLHttpRequest) {
//code for IE7+, Firefox, Chrome and Opera
xmlhttp = new XMLHttpRequest();
}
else {
//code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
console.log(this.responseText);
document.getElementById('message').innerHTML = this.responseText;
// if your returned response is in json, please, do ensure to parse the response before displaying
// like this JSON.parse(this.responseText)
}
}
let my_array = ["select1", "select2", "..."];
my_array = JSON.stringify(my_array);
var url = "create_amenities.php?my_json=" + my_array;
xmlhttp.open("GET", url, true);
xmlhttp.send();
}
下面是我从你的代码中注意到的:
您不需要再次在
xmlhttp
,所需的只是xmlhttp的我包含了保存要发送到服务器的数组对象的my_json参数。
现在,在服务器中,您需要捕获对象并将其转换为php可读对象。
$my_json = $_GET['my_json'];
$my_json = json_decode($my_json);
现在,您可以随心所欲地执行它,因为它现在已经成为一个完整的php数组。选取第一个数组选项的示例:
$first = $my_json[0];
echo json_encode($first) // hahaha, you echoed it for AJAX to display
// i used to json_encode() to convert from php object to a js readable object
https://stackoverflow.com/questions/6937144
复制相似问题