【问题标题】:Embedded XMLHttpRequest (AJAX calling a page which also uses AJAX)嵌入式 XMLHttpRequest(AJAX 调用也使用 AJAX 的页面)
【发布时间】:2011-10-23 19:32:54
【问题描述】:

我有一个嵌入式 XMLHttpRequest 问题;

数据流应该是这样的:

Interface.php 使用 modifyRecords.js (XMLHttpRequest) 从 modifyRecords.php 调用信息,而 modifyRecords.php 又使用 showRecords .js (XMLHttpRequest) 从 showRecords.php 调用信息。

如果我能以某种方式做到这一点,它将节省大量的代码复制和/或重写。

当我回溯查找错误所在时,似乎没有任何问题 showRecords.phpmodifyRecords.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


【解决方案1】:

除非我弄错了,否则您试图通过将元素的 innerHTML 设置为第一个来调用您的第二个 AJAX 脚本?

使用innerHTML 添加时不会执行脚本。不知道为什么,这让我很烦恼,但你最好将 HTML 和 JS 分开,然后将 HTML 放在 innerHTML 中,然后eval'ing JS。

【讨论】:

  • 这是一个很大的不便!你的建议很好,我会尝试让一个页面一个接一个地调用两个脚本,而不是让脚本相互引用。感谢您分享您的知识。
猜你喜欢
  • 2021-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多