2009-08-03 75 views
2

我在IE(7和8)中遇到getElementsByTagName問題。使用PHP和XML的Ajax,getElementsByTagName IE問題

我有一個地址查找,它將每個建議地址(作爲XML的一個字符串)返回到PHP會話變量中,然後使用返回請求的會話變量的AJAX函數訪問該變量。

每個會話變量被設置在AJAX地址查找的步驟1(我與嘗試沒有的字符編碼,並用UTF-8):

$_SESSION['addrHint_' . $k1] = '<?xml version="1.0" encoding="ISO-8859-1"?>'; 
$_SESSION['addrHint_' . $k1] .= '<Address>'; 
$_SESSION['addrHint_' . $k1] .= '<Postcode>' . $v1->Postcode . ' </Postcode>'; 
$_SESSION['addrHint_' . $k1] .= '<Line1>' . $v1->Line1 . ' </Line1>'; 
$_SESSION['addrHint_' . $k1] .= '<Line2>' . $v1->Line2 . ' </Line2>'; 
$_SESSION['addrHint_' . $k1] .= '<Line3>' . $v1->Line3 . ' </Line3>'; 
$_SESSION['addrHint_' . $k1] .= '</Address>'; 

,然後在步驟2中檢索:

header('Content-Type: text/xml'); 
print_r($_SESSION['addrHint_'.$_REQUEST['addr']]); 

在AJAX JS,當狀態是準備好了,它執行當中的代碼其他類似的路線,這樣:

var xmlDoc = xmlHttp.responseXML; 
var xmlRoot = xmlDoc.documentElement; 
var postcode = xmlRoot.getElementsByTagName("Postcode")[0].childNodes[0].nodeValue; 
document.forms[0]["address"+addr+"_Postcode"].value = postcode.substring(0, postcode.length-1); 

(它爲地址的每一行做了類似的事情。)長度爲1的代碼片段在那裏,因爲我必須爲每個元素添加一個空格來停止元素爲空時出現的問題。

它在Firefox中正常工作,但在IE中完全沒有。自那時起,我一直在谷歌搜索,並在前5頁找到了一些結果,但沒有解決方案。如果有人能夠說明這一點,我將非常感激。

在此先感謝。

+0

感謝下面的快速回復,我發現問題是在沒有地址的第2行時引起的,它會中斷腳本而不是跳到下一行。我認爲我已經通過向每個空值附加空格來對這個問題進行了排序,所以即使它們爲空,它也會返回一個值。 – bcmcfc 2009-08-03 22:00:46

回答

2

不是修改你的返回值,也許你應該實施一些錯誤檢查各地獲取節點值的代碼。

如果你做了大量的鏈接,你不能檢查空值。 而不是鏈接這樣的:

xmlRoot.getElementsByTagName("Postcode")[0].childNodes[0].nodeValue 

爲什麼不添加一些錯誤手之前檢查? 喜歡的東西:

var postCodes = xmlRoot.getElementsByTagName("Postcode"); 
if(postCodes && postCodes[0] && postCodes[0].childNodes[0]) { 
    document.forms[0]["address"+addr+"_Postcode"].value = postCodes[0].childNodes[0].childNodes[0].nodeValue; 
} 

這樣,你只嘗試分配如果沒有數據存在。在您期望的位置獲得空白輸入值。

現在,所有鏈接和if語句都可能會讓人厭煩,所以如果你喜歡,你可以將它包裝在一個函數中。

隨意在這裏檢查工作的例子:http://jsbin.com/ahidu

乾杯!

0

print_r ???

print_r($_SESSION['addrHint_'.$_REQUEST['addr']]); 

「$ SESSION [ 'addrHint'。$ _ REQUEST [ '地址']]」 不是數組。

+0

是的,它是一個包含xml代碼的字符串,因此print_r()的行爲與print/echo類似。否則它不會在FF中工作。 print_r()在這裏可能會引起混淆,但它並不是純粹的錯誤;-) – VolkerK 2009-08-03 21:53:13

+0

print_r是我還在返回數組時還剩下的,我忽略了將它切換回回顯。欣賞關於其正確使用的解釋。 – bcmcfc 2009-08-04 08:04:46

0

使用IE開發人員工具(IE8:內置的,IE7:Developer Toolbar)來調試javascript。
您可能還需要添加一些console debug code跟蹤就緒狀態。
在服務器端設置PHP的使用error_reporting爲E_ALL,並保持在Web服務器上的error.log中的眼(其中PHP的消息將顯示出來)

+0

該開發人員工具欄非常方便!我不知道它是否存在,謝謝你的提高。 – bcmcfc 2009-08-04 08:03:47