【发布时间】:2012-01-07 07:59:41
【问题描述】:
我有这个表单,它生成一个数组作为输出,我想通过 AJAX 将它发送到 PHP 页面。 表单是这样构建的:[使用更多条目]
<input type="hidden" name="reisdata[Van]" value="'.$reisdata["Van"].'">
<input type="hidden" name="reisdata[Naar]" value="'.$reisdata["Naar"].'">
并且php页面需要以数组的形式接收数据。
现在,有人向我展示了这段代码,通过 POST 在 AJAX 中传递一个数组,但我仍然不知道如何在 javascript 中读取该数组。
那么:我如何在 AJAX / Javascript 中从表单中读取数组? 我只是通过键入:document.formname.reisdata 来阅读它吗?
这是我的 AJAX 代码:
// Algemene functie om een xmlHttp object te maken. Via dit object kunnen we later Ajax calls plaatsen
function GetXmlHttpObjectReisData() {
var xmlHttp;
try { // Firefox, Opera 8.0+, Safari
xmlHttp = new XMLHttpRequest();
}
catch (e) { // Internet Explorer
try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {
alert("Your browser does not support AJAX!");
return false;
}
}
}
return xmlHttp;
}
function CallAjaxReisDataFunction(serverScript,arguments)
{
var xmlHttp = new GetXmlHttpObjectReisData(); // Functie welke wordt uitgevoerd als de call naar de server klaar is State 4)
xmlHttp.onreadystatechange = function()
{
if (xmlHttp.readyState == 4)
{
handleReisDataResult(xmlHttp.responseText);
}
}
// Ajax call (Request naar de server met eventuele parameters (arguments))
xmlHttp.open("POST", serverScript, true);
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.setRequestHeader("Content-length", arguments.length);
xmlHttp.setRequestHeader("Connection", "close");
xmlHttp.send(arguments);
}
function callReisDataServer(serverScript,van,naar)
{
CallAjaxReisDataFunction(serverScript,"?&reisdata=" + reisdata);
}
function handleReisDataResult(responseText)
{
document.getElementById('reis').innerHTML = responseText;
}
这是某人 (@mephisto123) 之前给我的代码,但这适用于预定义的 javascript 数组:
var postdata = {"provincie":"123","reisdata":{"Overstap":"234","Van":"345"}};
var post = "";
var url = "data-reis-refresh.php";
var key, subkey;
for (key in postdata) {
if (typeof(postdata[key]) == object) {
foreach (subkey in postdata[key]) {
if (post != "") post += "&";
post += key + "%5B" + subkey + "%5D=" + postdata[key][subkey];
}
}
else post += key + "=" + postdata[key];
}
req.open("POST", url, true);
req.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
req.setRequestHeader("Content-length", post.length);
req.setRequestHeader("Connection", "close");
req.send(post);
【问题讨论】:
-
当您说要从 JavaScript 中的 submitted 表单中读取数组时,不清楚您的意思。表单已提交到您的服务器,不是吗?而且你说服务器代码是PHP。
-
对不起,这确实有点奇怪。我应该把提交的部分排除在外。应该是:表单提交时从表单中读取数组(当我使用:document.forms[formname].submit();)
-
那么,为什么在提交时需要“读取数组”?您需要做的就是为 AJAX 请求构建参数,并且表单字段名称显然已经是服务器期望的格式。 (如果不是,那为什么用这样的字段名创建表单?)
-
另外,我一般不喜欢推荐 JavaScript 框架,但这种特殊情况是考虑 Prototype、jQuery 或任何支持 AJAX 的简单框架的一个很好的理由。此类库会为您处理一些浏览器怪癖,它确实大大简化了该过程。但是,如果您愿意,您当然可以自己完成所有操作。
-
如果在使用 JQuery 时这很容易,我完全赞成。但是,你能告诉我怎么做吗?
标签: javascript ajax arrays forms