我正在通过失败来学习Ajax并且遇到了障碍:
我有一个数组(如果重要的话,数组是基于用户检查的复选框存储数字ID),这是用Javascript编写的。
我有一个在用户点击“保存”按钮时调用的函数。功能如下:
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对象?
提前致谢。
答案 0 :(得分:49)
如果你的数组有超过1维或者是一个关联数组,你应该使用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));
答案 1 :(得分:1)
遍历数组并每次将encodeURIComponent('keyname[]') + '=' + encodeURIComponent(theArray[i]) + '&'
附加到查询字符串。
此外,我应该尝试使用JSON吗?
你可以,但这意味着在另一端解码JSON而不是让正常的表单处理来处理它。
如果是这样,我怎样才能通过ajax发送JSON对象?
有no such thing as a JSON object。 JSON采用字符串的形式,您可以在查询字符串中包含字符串(只记得encodeURIComponent
)。
答案 2 :(得分:-3)
首先,是的,不要手工编写ajax。您不太可能生成真正适用于所有浏览器的内容。
解决实际问题的最佳方法是将数组作为cgi参数提交。
如果复选框位于表单中,则您需要做的很少 - 只需提交表单
即可 <form><input type=checkbox ...><input type=checkbox ...>
$.post("test.php", $("#testform").serialize());
有关如何执行此操作的详细信息,请参阅http://api.jquery.com/jQuery.post/。 您的列表将在PHP中显示为数组。
或者用非常简单的东西来增加你自己的例子,做到这一点:
url = url + '?checkboxes=' + checkboxes.join(',');
现在只需将它拆分到PHP中,你就可以恢复它了!