2011-01-25 102 views
0

我有一個頁面,我想顯示幾個MySQL表。
右側有一張表格,只有在選擇了不同的人時纔會更改。
第二張桌是中心的主桌。我有一個包含每個人的下拉框。所選人的結果顯示在中間表中。每個人都有多個結果,因此有第二個下拉框可以選擇要顯示的結果中的哪一個。這是通過Ajax XMLHTTP請求完成的。Ajax請求與Javascript

問題是右表使用了一些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

回答

0

It's是一個漫長的時間,因爲從來就見過這樣的代碼,但一個問題,我所看到的,是你不要在你的XMLHttpRequest中包含任何類型的變量;沒有用戶ID或任何東西。它只是應該加載一個靜態頁面?

是否有任何理由,你不能使用類似jQuery的庫?這不是魔術子彈,但它會讓你的生活和ajax的要求更容易。

+0

那麼這是一個我從互聯網上使用的例子,我認爲我的版本包括一些變量沒有任何區別。 我知道jQuery,但更好嗎?它更容易嗎? 我知道它的一些基礎知識,所以我將不得不學習一切(包括Ajax?)。 – Milaan 2011-01-25 18:28:04

+0

@Milaan,我認爲擺脫框架(帶或不帶jQuery)是一件好事,您可以使用最基本的ajax請求將您的PHP腳本的輸出直接放在需要的地方,使用`.load() `:http://api.jquery.com/load/ – jeroen 2011-01-25 18:35:13

+0

謝謝jeroen!這確實是比我的框架更好的方式(我從來沒有使用過它們,但它似乎是唯一的解決方案)。 我應該用jQuery做中間表嗎? 如果我這樣做可能會更好,對吧? – Milaan 2011-01-25 18:41:06

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); 
} 
+0

笏我應該把它變成呢? 我試過了:document.getElementById('maintable').innerHTML = response Text; 但是這也行不通... 還是我犯了一個錯誤? – Milaan 2011-01-25 18:25:15

0

您可能需要使用DOM功能來下載的內容添加到現有的文檔,如:

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

最好的辦法可能是使用一個苗條的JavaScript框架謊言的jQuery它可以幫助您與瀏覽器的兼容性。

0

jQuery應該讓你更容易。你的代碼應該看起來像這樣。

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

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

而且somepage.php可能是這樣的:

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