我目前有一个网页,其中iframe包含存储在不可见表单中的数据,我想用div替换该iFrame,其中内容通过AJAX进行更改/更新。
如果您不想阅读所有这些内容,可以跳到最后并阅读我的主要问题。
现在,复杂的部分是表单包含一个不可见形式的所有重要和已用数据,需要通过POST发送。但是,该页面还包含一个可以通过GET发送数据的表单。并且:我已经设置了这样的表单,php文件将表单数据作为数组接收。
目前它的工作原理如下: iFrame显示数据,并以不可见的形式存储。当您希望页面每30秒自动刷新一次时,单击一个按钮,您将被重定向到另一个页面,该页面使用POST从上一页接收数据。 当您进入自动刷新页面时,我使用Javascript自动提交包含所有重要数据的表单,以刷新页面。
重新提交页面是不可靠的,因为我使用PHP对我正在使用的数据进行一些重要的计算。将所有这些功能移至Javascript不是一种选择。
为了清楚起见,这里是对我案例的一个非常简短的描述:
主页:2个表单,1个POST设置,因此变量在1个数组中,1个GET包含6个变量。 GET表单可以修改为AJAX函数,因为它只包含6个变量
自动更新页面:2个表单,与之前相同。虽然这个POST表单是每隔30秒通过Javascript自动提交的(更新PHP 功能输出)。
所以,我的主要问题是: 可以,如果是这样,如何从AJAX中的POST表单接收数组,然后将其作为数组发送到php页面?
编辑: 以下是提交表单的一些代码:
<script type="text/javascript">
function paginarefresh() {
document.forms["updateform"].submit();
}
var paginatimer = setInterval(paginarefresh, 60000);
</script>
并且表单构建如下:
echo '<form action="data-reis-refresh.php" id="updateform" name="update" method="POST" style="width: 100px;">';
echo '<input type="submit" class="submit replaced" value="Volg deze trein" name="submit-search"/>';
if (round($afgelegdpercentage*100,1)==100) {
echo ' <a href="#" class="submit button"><span style="text-align: center;">Deze trein is al aangekomen</span></a>';
} else {
echo ' <a href="javascript:submitform(\'update\')" class="submit button"><span style="text-align: center;">Ververs gegevens (automatisch elke minuut)</span></a>';
}
echo '<input type="hidden" name="provincie" value="'.$provincie.'">
<input type="hidden" name="reisdata[Overstap]" value="'.$reisdata["Overstap"].'">
<input type="hidden" name="reisdata[Van]" value="'.$reisdata["Van"].'">
然后更长(更长,并且长度不断变化);
我正在将此用于我的所有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;
}
答案 0 :(得分:3)
JS代码:
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) {
for (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);
将关联数组从PHP转移回JS:
在PHP脚本中,从AJAX请求调用:
echo "(".json_encode($hash).")";
在JS代码中,解析结果:
var hash = eval(response);
答案 1 :(得分:1)
最后,我最终使用了jQuery .post()和.get()。 它们非常易于使用,速度更快,更灵活。