【发布时间】:2011-10-23 19:32:54
【问题描述】:
我有一个嵌入式 XMLHttpRequest 问题;
数据流应该是这样的:
Interface.php 使用 modifyRecords.js (XMLHttpRequest) 从 modifyRecords.php 调用信息,而 modifyRecords.php 又使用 showRecords .js (XMLHttpRequest) 从 showRecords.php 调用信息。
如果我能以某种方式做到这一点,它将节省大量的代码复制和/或重写。
当我回溯查找错误所在时,似乎没有任何问题 showRecords.php 和 modifyRecords.php 都可以单独加载,就在AJAX 调用另一个 AJAX 它完全中断。
本质是这样的:
我的用户界面正在调用 modifyRecords.js,如下所示;
function modifyRecords(cell,report,column,oldValue)
{
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
var xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById(cell).innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","modifyRecords.php?report="+report+"&column="+column+"&oldValue="+oldValue,true);
xmlhttp.send();
}
modifyRecords.php 正在调用另一个名为 showRecords.js 的 AJAX 函数;
function showRecords(str,column,nextDiv,oldValue)
{
if (str== null)
{
document.getElementById(nextDiv).innerHTML="----------------------------------------";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
var xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById(nextDiv).innerHTML=xmlhttp.responseText;
document.getElementById(nextDiv).value = oldValue ;
}
}
xmlhttp.open("GET","showRecords.php?"+column+"="+str,true);
xmlhttp.send();
}
问题是这些中的每一个都是独立工作的,但是,当我使用一个 AJAX 函数调用依赖于第二个 AJAX 函数的页面时,不会加载记录。
我知道这与同步性有关,因为我唯一的猜测是引用函数调用时引用的页面尚未完成加载。
我尝试将参数设置为“false”以进行同步,而不是通常的异步,但这会破坏任一功能。
最好的解决方案是什么?
我考虑过组合我所有的 AJAX 函数,这需要大量的重写才能使它们更通用,并且适用于两种环境。
【问题讨论】:
-
“记录不加载”不是问题的描述。是否有错误被抛出?哪一行“不起作用”?您是否尝试过添加
alert()s 并查看它们在哪里停止? -
嵌入的 XMLHttpRequest 根本失败,我不知道为什么。显然这是因为你不能
innerHTML脚本。对不起,这是我在不知道回答者说什么的情况下所能给出的最好的。我没想过要到处发出警报,这似乎是将来调试的好方法。谢谢。
标签: php javascript ajax xmlhttprequest