我有一个嵌入式XMLHttpRequest问题;
数据流应如下所示:
Interface.php 使用 modifyRecords.js (XMLHttpRequest)来调用来自 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函数,这需要大量的重写才能使它们更通用,并且对两种环境都有效。
答案 0 :(得分:1)
除非我错了,否则你试图通过设置第一个元素的innerHTML来调用你的第二个AJAX脚本?
使用innerHTML添加时不会执行脚本。不知道为什么,这对我来说是一个烦恼,但是你可能最好分开HTML和JS,然后把HTML放在innerHTML中,然后eval
用JS。