使用Javascript进行Ajax请求

时间:2011-01-25 18:10:33

标签: php ajax xmlhttprequest

我有一个页面,我想在其中显示几个MySQL表 右边有一个表,只有在选择了不同的人时才会改变 第二张桌子是中心的主桌子。我有一个包含每个人的下拉框。所选人员的结果显示在中间表格中。每个人都有多个结果,因此有第二个下拉框可供您选择要显示的结果。这是由Ajax XMLHTTP请求完成的。

问题是右表使用了一些javascript。我知道Ajax结合XMLHTTP请求是不可能的。但没有JavaScript我无法做出我想要的东西。有没有办法,在javascript完成他的工作后显示正确的表格?

我现在使用框架。这不是很好。因为我必须将两个页面的样式放在一起才能看起来很好,这并不像说的那么容易。但这样做就像我想要的那样。

所以我搜索了互联网(很长一段时间),在我想放弃之前几分钟我找到了这段代码(来自http://www.javascriptkit.com/dhtmltutors/ajaxincludes.shtml):

function HttpRequest(url){ 
var pageRequest = false //variable to hold ajax object 
   /*@cc_on
      @if (@_jscript_version >= 5)
         try {
         pageRequest = new ActiveXObject("Msxml2.XMLHTTP")
         }
         catch (e){
            try {
            pageRequest = new ActiveXObject("Microsoft.XMLHTTP")
            }
            catch (e2){
            pageRequest = false
            }
         }
      @end
   @*/

   if (!pageRequest && typeof XMLHttpRequest != 'undefined')
      pageRequest = new XMLHttpRequest()

   if (pageRequest){ //if pageRequest is not false
      pageRequest.open('GET', url, false) //get page synchronously
      pageRequest.send(null)
      embedpage(pageRequest)
   } 
} 

function embedpage(request){ 
   //if viewing page offline or the document was successfully retrieved online (status code=2000)
   if (window.location.href.indexOf("http")==-1 || request.status==200)
      document.write(request.responseText)
   }
}

HttpRequest("external.htm") //include "external.htm" onto current page   

此代码完美运行......第一次。一旦你改变了这个人,整个页面就会消失,只有表格显示出来,而firefox会一直“加载”页面(你看到那个圆圈转了)。我知道如何编辑上面的代码以满足我的需求,但我不了解Ajax或如何解决这个问题。希望有人可以帮助我,给我一个很好的解决方案!并告诉我为什么上面的代码不能正常工作?

提前致谢!

Milaan

4 个答案:

答案 0 :(得分:2)

document.write仅在首次加载页面时有效。页面呈现完成后,调用document.write将首先清除页面。

https://developer.mozilla.org/en/document.write

您可能想要做的是:

if (window.location.href.indexOf("http")==-1 || request.status==200) {
    var elm = document.createElement('div');
    elm.innerHTML = request.responseText;
    document.getElementsByTagName('body')[0].appendChild(elm);
}

答案 1 :(得分:0)

我已经看了很长时间了,因为我看过这样的代码,但我看到的一个问题是你在XMLHttpRequest中没有包含任何变量;没有用户ID或任何东西。是否应该加载静态页面?

你有什么理由不能使用像jQuery这样的库吗?这不是神奇的子弹,但它会让你的生活和ajax要求更容易。

答案 2 :(得分:0)

您可能希望使用dom功能将下载的内容添加到现有文档中,例如:

document.getElementById('mypanel').innerHTML = '<html code goes here>';

最好的想法可能是使用一个简洁的javascript框架谎言jquery,它可以帮助您实现浏览器兼容性。

答案 3 :(得分:0)

jQuery应该让事情变得更容易。你的代码应该是这样的。

$.post("somepage.php", function(data){
   $("#divID").html(data);
});

<div id="divID"></div>

somepage.php可能是这样的:

<?php
   // get table content
   echo "<table>...</table>";
?>