2013-03-11 54 views
0

沒有什麼比Web開發讓我感到沮喪的,幸運的是我不經常這樣做,下面是一個例子。沒有任何理由,爲什麼下面的代碼工作完全正常在Dreamweaver中實時查看,後alert("2")停止(3從不出現警報,同樣沒有在任何輸出)在Chrome並不在Internet Explorer在所有的工作?試圖在REST中使用JavaScript

<script type="text/javascript"> 
    function getStuff() { 
     var url = "http://url/to/restful/api";    

     alert("1");  
     var client = new XMLHttpRequest();    
     client.open("GET", url, false); 

     client.setRequestHeader("Content-Type", "application/json"); 
     alert("2") 

     client.send(); 
     alert("3")    

     document.getElementById("output").value = client.responseText; 
    }  
</script> 

這被稱爲是這樣的:

<button onClick="getStuff()">GET</button> 
+0

我不知道,我應該理想的方式是什麼?我對JS沒有什麼瞭解。我如何用jQuery做同樣的事情? – jaho 2013-03-11 06:07:11

+0

@Marian:新的XMLHttpRequest()不會在IE中工作。請通過此鏈接http://en.wikipedia.org/wiki/XMLHttpRequest – karthick 2013-03-11 06:08:57

+1

不同的瀏覽器處理事情微妙的不同,所以,如果你不熟悉的JS和每個瀏覽器怪癖,一個框架是要走的路。 jQuery很棒,因爲它很好地覆蓋了SO。我喜歡ender或requirejs,但他們可能不是你想要的。 – tjameson 2013-03-11 06:13:29

回答

1

試試下面的代碼: 請通過此鏈接http://en.wikipedia.org/wiki/XMLHttpRequest

<script type="text/javascript"> 
    function getStuff() { 
     var url = "http://url/to/restful/api";    

     alert("1");  
     var client = getXMLHttpRequestObject();    
     client.open("GET", url, false); 

     client.onreadystatechange = function() { 
      if(client.readyState == 4){ 
        document.getElementById("output").value = client.responseText; 
      } 
     }; 

     client.setRequestHeader("Content-Type", "application/json"); 
     alert("2") 

     client.send(); 
     alert("3")    


    }  

function getXMLHttpRequestObject() { 
    var ref = null; 
    if (window.XMLHttpRequest) { 
     ref = new XMLHttpRequest(); 
    } else if (window.ActiveXObject) { // Older IE. 
     ref = new ActiveXObject("MSXML2.XMLHTTP.3.0"); 
    } 
    return ref; 
} 
</script> 
+0

這解決了它的IE瀏覽器,但不適用於Chrome。 – jaho 2013-03-11 06:21:18

+0

@Marian:現在試試這個代碼。請確保學習如何進行Ajax調用。我知道這對於編寫C和C++的人來說是新的。那麼每個人都在那裏。 PS:我沒有在這裏做過任何抽象,相應地改變 – karthick 2013-03-11 06:34:40

+0

我會學習一天。到目前爲止,這是我一生中寫的最多的Javascript。使用上面的代碼Chrome仍然沒有運氣。 – jaho 2013-03-11 06:45:24

0

在一個側面說明

client.open("GET", url, false);

使用同步連接使用ajax是一個壞主意。它會凍結你的UI代碼。

這就是爲什麼警報(3)是從來沒有所謂的理由。當您執行xhr.send()時,線程將停止並等待來自服務器的響應。

做到這將是client.open("GET", url, true);

+0

這打破了它的DreamWeaver,並沒有解決它的Chrome。哇,這太可怕了。 – jaho 2013-03-11 06:23:02

+0

將'console.onreadystatechange = function(){'在client.send()之後,控件將返回到此函數。 P.S.警報(3)應該放在上面引用的if語句中。否則,當你將它設置爲異步時,只要調用getStuff()函數,alert(1),alert(2),alert(3)就應該發生三次。另外,如果你可以提到你正在嘗試解決的用例是什麼。 – gashu 2013-03-11 06:48:03

+0

'document.getElementById(「output」)。value = client.responseText;'應該放在'if'裏面的onreadyStateChange處理函數 – gashu 2013-03-11 06:54:00