2013-08-02 53 views
1

我想通過ajax替換外部文件的div的內容。我使用這樣做的代碼是:另外通過PHP加載頁面,如果Ajax失敗

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Test</title> 
<script type="text/javascript"> 
window.onload = function(){ 

    document.getElementById("aside").innerHTML="<img src='loadingImage.gif'>"; 

    var x = null; 

    if (window.XMLHttpRequest) { 
     var x = new XMLHttpRequest(); 
    } else if (window.ActiveXObject) { 
     var x = new ActiveXObject('MSXML2.XMLHTTP.3.0'); 
    } else { 
     // fallback 
    } 

    x.open("GET", "other_content_1.php", true); 
    x.send(""); 
    x.onreadystatechange = function() { 

     if(x.readyState == 4) { 
      if(x.status==200) 
       document.getElementById("aside").innerHTML = x.responseText; 
      else 
       document.getElementById("aside").innerHTML = "Error loading document"; 
     } 
    } 
} 
</script> 
</head> 

<body> 
<div id="aside">This is other content</div> 
</body> 
</html> 

我的問題:

如果啓用JavaScript,然後將上面的代碼工作正常,但如果JavaScript被禁用,那麼PHP應該加載該文件。我該怎麼做?

+0

爲什麼要使用AJAX,如果你可以用你的服務器端語言來做到這一點? – Blender

+0

[如果用戶禁用了JavaScript,如何備份到完全不同的索引頁]?(http://stackoverflow.com/questions/3936002/how-to-fallback-to-entirely-different-index-page-if - 用戶 - 擁有 - JavaScript的禁用)。這並不理想,但第一個答案可能是你最好的選擇。 – FakeRainBrigand

+0

另請參閱本教程:http://hungred.com/how-to/determine-whether-javascript-is-enabled-disabled-via-php/ – 2013-08-02 00:32:25

回答

1

如果你打算讓你的代碼向後兼容沒有JavaScript,那麼你真的沒有理由使用AJAX。如果你只是想串入您的aside元素,然後像做:

//first the PHP page 'other_content_1.php' 
<?php 
    $resp = 'Whatever String Response You Want'; 
?> 
//now your other page 
<?php 
    include 'other_content_1.php'; 
?> 
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 
'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'> 
<html xmlns='http://www.w3.org/1999/xhtml'> 
    <head> 
    <meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> 
    <title>Test</title> 
    </head> 
<body> 
    <div id='aside'><?php echo $resp; ?></div> 
    <script type='text/javascript' src='should_be_external.js'></script> 
<body> 
</html> 

請注意,如果您希望這種情況發生,除了onload那麼你會提交使用$_POST$_GET來處理PHP響應的形式。

0

你有沒有考慮嘗試noscript選項? 請參閱:What do I do if Javascript is disabled by a client?

但是,如果你有很多的網頁,如果您在整個頁面中使用jQuery的/ AJAX,這可能是很多工作 - 我猜你做或使用jQuery/AJAX加載它們會稍微沒有意義。

0

當瀏覽器顯示網頁並發現不支持JS時,PHP /服務器已經爲該頁面提供服務。你可以試試這個。

  • #aside元素可以有文本&鏈接通知用戶如何不讓JS的支持,並採取其他頁面
  • PHP可以加載該文件,並服務於新的頁面內容。

如果JS支持,您的上面的代碼將無論如何將取代上述鏈接。