2014-07-18 50 views
2

當運行這個PHP腳本:的getElementById在服務器返回null,但在我的本地WAMP正常工作

$doc = new DOMDocument(); 
$doc->loadHTMLFile("../counter.html"); 
$ele2 = $doc->getElementById ("coupon_id"); 
if($ele2){ 
    $ele2->nodeValue = $result["coupon_code"]; 
} 
$response["list"]= $doc->saveHTML(); 

$ ele2被發現是空我的Web服務器上,因此不會進入到if條件,但它在我的本地服務器上正常工作。這裏是我的counter.html文件:

<div class="panel panel-success"> 
    <div class="panel-heading"> 
     <h3 id="coupon" class="panel-title">Coupon name 1</h3> 
    </div> 
<p id="coupon_id" hidden>coupon id</p> 
    <div id="counter-up" class="panel-body"> 
     0 
    </div> 
    </div> 

我已經取得一定的HTML文件做成功加載:echo "<pre>".$doc->saveHTML()."</pre>";

+1

我想,你正在訪問的DOM元素DOM之前完全加載/就緒。 – prava

+0

是否嘗試加載找到併成功加載的文件? – fkerber

+4

@prava我認爲你不是在閱讀這個問題。這是PHP。 'loadHTMLFile'是同步的。 –

回答

2

documentation

對於此功能工作,你將需要使用DOMElement::setIdAttribute或將屬性定義爲ID類型的DTD來設置某些ID屬性。在稍後的[sic]的情況下,在使用此功能之前,您需要使用DOMDocument::validateDOMDocument::$validateOnParse驗證您的文檔。

既然您沒有定義DTD,您可以在加載HTML文件之前添加$doc->validateOnParse = true;。這應該根據HTML DTD進行驗證並設置適當的ID屬性。

如果不爲你工作,有一個在user-contributed notes提到一個備用解決方案:

$xpath = new DOMXPath($doc); 
$ele2 = $xpath->query("//*[@id='coupon_id']")->item(0); 
相關問題