2009-09-16 60 views
0

我試圖通過使用jQuery .ajax(或.get,.post等)的http訪問第三方api。該API駐留在我的機器在使用JQuery訪問跨域數據服務/ API

http://localhost:7777/server/<method>?<args> 

服務器具有的方法堆棧查詢其OLAP服務器,如登錄(返回登錄鍵與其他方法使用),數據庫(列出的數據庫服務器),立方體,尺寸等等等等

例如

要登錄到服務器

http://localhost:7777/server/login?user=admin&password=21232f297a57a5a743894a0e4a801fc3

如果我將其輸入到瀏覽器地址欄中,然後獲取正確的數據。

但是,我想製作一個小型網頁來測試這些調用,並認爲我應該可以使用jQuery創建獲取並返回到瀏覽器的數據。

繼承人我的代碼

<html> 
<head> 
    <title>Palo Test Report</title> 
    <script type="text/javascript" src="scripts/jquery-1.3.2.min.js"></script> 
     <script type="text/javascript" language="javascript">    
     function calculate(){ 
      $.ajax({ 
       type:"GET", 
       url:"http://localhost:7777/server/login?user=admin&password=21232f297a57a5a743894a0e4a801fc3&callback=?", 
       success: function(data,textStatus){ 
        alert(data + ":" + textStatus); 
       } 
       , 
       error: function(request,errorStatus,errorThrown){ 
        alert("Error:" + errorThrown); 
       } 
      }); 
     } 
    </script> 
</head> 
    <body> 
     <div>Sample Palo Report #1</div> 
     <input type="button" value="Calculate" onclick="calculate();" /> 
    </body> 
</html> 

方法進入到服務器並點擊了成功回調。但是,數據參數是一個空字符串。

我讀了一些關於通過ajax進行跨域訪問的問題,看起來像是服務運行在不同的端口上可能會發生什麼,儘管我對「成功」標誌感到有點驚訝。另一個奇怪的是,如果我在IIS中創建一個新的虛擬目錄並將文件放在那裏,我用空的errorThrown參數打錯誤回調。

service/api返回簡單的字符串不是json所以getJSON不起作用。

正在嘗試使用jQuery嗎?

我有一個解決方法,但它的相當醜陋!預先

由於

ģ

回答

1

Ajax調用在同一個域的限制。你需要jsonP來查詢第三方域名。檢查ajax()方法jsonP選項。

UPDATE

CORS(跨來源資源共享)也作爲由W3C工作草案。

+0

這不再是事實。大多數人會認爲'JSONP'和'CORS'都是Ajax調用。兩者都需要來自服務器的支持。 – hippietrail 2012-09-03 10:16:27

+0

@hippietrail新增 – 2012-09-10 20:23:13

2

我的猜測是您的測試網頁位於http://localhost:7777因爲否則它無法正常工作。

$。阿賈克斯按預期工作,但因爲你沒有提供的選項數據類型:「JSONP」

  • 它假定檢索到的數據是XMLHTML(「智能」根據猜測doc,但我們都知道什麼智能真的意味着算法)
  • 它不打擾處理回調=?的部分網址(如果您跟蹤網絡流量的東西,如螢火蟲,你可以輕鬆地控制了回調=? URL的一部分保持原樣)

現在,服務器響應絕對不是XML也不HTML,但請求成功。所以你最終會用一個空的數據參數來調用你的成功回調函數(儘管我會期待一個帶有響應文本的基本的HTML文檔)。

只需在您的選項中添加dataType:「jsonp」,它應該按預期工作。