2011-02-26 59 views
1

我正在嘗試編寫一個小腳本,它可以發送請求並下載json響應。使用XmlHttpRequest未收到回覆

var xmlhttp = false; 

    if (window.XMLHttpRequest) 
     {// code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
     } 
    else 
     {// code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     } 

     xmlhttp.onreadystatechange=function() 
     { 
     if (xmlhttp.readyState==4) 
     { 
     // I tried checking for status but that is always coming 0 
     document.getElementById("myDiv").innerHTML=xmlhttp.responseText+"a"; 
     } 
     }*/ 
     var url = 'http://exampleurl.com/[email protected]'; 
    xmlhttp.open('GET',url,true); 
    xmlhttp.send(null); 

現在,如果我用一個文本文件替換URL,它工作正常。然而我的服務器以JSON編碼進行回覆。另外,如果我在瀏覽器中訪問網址,它會顯示我想要的輸出。

但是,當我使用XmlHttpRequest查詢它時,它總是給我一個0的狀態​​,並有一個空響應(無需解碼)。

+0

是在同一個完成的請求域? – kjy112 2011-02-26 22:23:51

+0

不是,它的跨域。我正在遠程服務器上進行公共API調用。 – Inder 2011-02-26 23:10:48

+0

我更新了我的答案。基本上,您需要將GET請求包裝在服務器上的Web服務中 - 然後使用此請求調用您的服務器,而不是實際的API。 – tpow 2011-02-27 14:09:55

回答

0

我通常驗證readyState(200是你想要什麼)

您是否嘗試過檢查xmlhttp.statusText,看它是否擁有什麼有趣的東西后驗證xmlhttp.status

+0

在我的情況下,xmlhttp.status始終爲0. statusText始終爲空。 – Inder 2011-02-26 22:49:53

1

您是否嘗試過使用URL編碼查詢參數?看起來你可能會發送特殊字符。

正如kjy112提到的,有以使客戶端請求到其他領域,甚至子域的限制 - 同源策略..

更新: 因德爾,看到http://en.wikipedia.org/wiki/Same_origin_policy,這是一種安全機制,可防止你正在嘗試做什麼。

以下是您可以如何解決的方法: 讓您的服務器代表您的客戶端撥打電話。我的意思是,接下來要通過瀏覽器(通過AJAX)進行調用,並將其設置爲服務器上的Web服務。然後讓你的AJAX調用進入你的服務器,然後這個服務器會進行調用並返回響應。所以,你使用你的服務器作爲中介。

或者

如果它是一個公共的API,他們很可能配置爲JSONP(http://ajaxian.com/archives/jsonp-json-with-padding)

+0

是的,即使使用encodeURI它也沒有幫助。我不明白你對跨域請求的評論。你能澄清一下嗎? – Inder 2011-02-26 22:49:12

+0

@Inder我認爲他在說你的url中的'http:// exampleurl ...'。 JavaScript不允許通過AJAX轉移到任何域,而是您正在使用的域。 – Shad 2011-02-27 00:08:58

相關問題