PHP / AJAX - 用DIV替换iFrame的建议(结合AJAX)

时间:2011-11-26 19:06:35

标签: php javascript ajax forms iframe

我目前有一个网页,其中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;
}

2 个答案:

答案 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()。 它们非常易于使用,速度更快,更灵活。