2012-01-16 64 views
0

所以我有一個.js文件,我需要從PHP文件中檢索一個變量。不,我不能讓服務器把.js當成.php。在.js文件中,我可以在ajax responsetext處理後更新變量嗎?

所以無論如何,我有此腳本

function getPHPVariable(){ 
var ajaxRequest; // The variable that makes Ajax possible! 

try{ 
    // Opera 8.0+, Firefox, Safari 
    ajaxRequest = new XMLHttpRequest(); 
} catch (e){ 
    // Internet Explorer Browsers 
    try{ 
     ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP"); 
    } catch (e) { 
     try{ 
      ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
     } catch (e){ 
      // Something went wrong 
      alert("Your browser broke!"); 
      return false; 
     } 
    } 
} 
// Create a function that will receive data sent from the server 
ajaxRequest.onreadystatechange = function(){ 
    if(ajaxRequest.readyState == 4){ 
     variableIWant = ajaxRequest.responseText; 
    } 
} 
ajaxRequest.open("GET", "phpfile.php", true); 
ajaxRequest.send(null); 

} 

現在variableIWant是我需要的東西在另一個字符串中使用以後,但每次我把它它顯示爲未定義。我知道變量正在被正確發送,因爲只需添加alert(variableIWant);在responseText行下面,它正確地提醒我該變量。

所以爲了簡單起見,是否有可能獲得變量IWant並將其用於另一個字符串,或者我是SOL,因爲它必須等待readystate?

+0

「我不能讓服務器把.js當成.php,雖然」 - 那又如何?使用'.php'文件。瀏覽器關心的是內容類型,而不是文件擴展名。 URI中沒有文件擴展名。 – Quentin 2012-01-16 09:49:27

+0

對不起,我必須有.js文件。它被幾十個其他網站上的腳本標籤調用。 – Calvin 2012-01-16 09:51:49

+0

301永久移動 – Quentin 2012-01-16 09:52:46

回答

1

你在哪裏定義variableIWant

如果您只是將它分配給onreadystatechange函數,它只在該函數的範圍內可用。

所以你必須要麼外面聲明它所有的功能或寫

window.variableIWant = ajaxRequest.responseText; 

UPDATE:就像Quentin指出,只要把代碼onreadystatechange函數內部...

或者:

ajaxRequest.onreadystatechange = function() { 
    if (ajaxRequest.readyState == 4) { 
     variableIWant = ajaxRequest.responseText; 
     longString = "The variable I retrieved is: "+variableIWant+". Isn't this nice?"; 
     document.getElementById('theDivPart').innerHTML = longString; 
    } 
} 

或:

ajaxRequest.onreadystatechange = function() { 
    if (ajaxRequest.readyState == 4) { 
     update(ajaxRequest.responseText); 
    } 
} 

function update(value) { 
    longString = "The variable I retrieved is: " + value + ". Isn't this nice?"; 
    document.getElementById('theDivPart').innerHTML = longString; 
} 

http://jsfiddle.net/roberkules/JgZ2B/

順便說一下,有沒有理由你不使用JavaScript框架?例如像jquery一樣照顧所有的ajax麻煩?你在jQuery中的代碼:

<script type="text/javascript"> 
$.get('http://sumary.org/phpfile.php').done(function(data){ 
    $(function() { 
     $('#theDivPart').html('The variable I retrieved is: ' + data + '. Isn\'t this nice?'); 
    }); 
}); 
</script> 

<body> 
<div id="theDivPart"></div> 
</body> 
+0

我有在所有函數之外定義的'variableIWant'。即使使用'window.variableIWant = ajaxRequest.responseText;'我仍然只是在字符串中使用undefined作爲變量。是否有可能將其顯示爲未定義,但是當它更新時,它稍後會更改它? – Calvin 2012-01-16 19:19:33

+0

我認爲這將是最好的,如果你會提供更多的代碼...(也許上的jsfiddle)充分認識發生了什麼事情。 – roberkules 2012-01-16 19:45:43

+0

http://jsfiddle.net/BqDST/ 這個例子將有警報顯示正確的值(這是「正確」),而被放置在頁面上的div標籤字符串顯示未定義的值 – Calvin 2012-01-16 19:55:50

0

所以爲了簡單起見,是有可能得到的variableIWant而在另一個字符串中使用它,還是我的運氣,因爲它必須等待readyState的?

它必須等待readystate函數被調用,並且直到HTTP響應返回纔會發生。

把你的邏輯放到你爲readystate分配的函數中,這就是readystate的用途。

相關問題