2011-05-17 33 views
12

我有點新手在JavaScript,但我想調用一個JSON Web服務,需要基本認證使用jQuery(或任何真正可行的)。如何使用jQuery調用需要基本認證的JSON Web服務?

我一直沒有能夠在Google上提出任何真正的答案。我正在嘗試做什麼?

+0

在這裏看到一個例子:http://stackoverflow.com/questions/671042/using-javascript-with-the -twitter-api/671054#671054 – 2011-05-17 02:59:50

+0

+1:很好的問題;探索了我從未想過的Ajax的一個方面。 – 2011-05-17 04:14:39

+0

JavaScript是否在與Web服務位於同一域的頁面上執行? – 2011-05-17 04:46:40

回答

10

您將需要設置適當的請求標頭來傳遞憑據。例如見here

$.getJSON({ 
    'url': 'http://host.com/action/', 
    'otherSettings': 'othervalues', 
    'beforeSend': function(xhr) { 
     //May need to use "Authorization" instead 
     xhr.setRequestHeader("Authentication", 
      "Basic " + encodeBase64(username + ":" + password) 
    }, 
    success: function(result) { 
     alert('done'); 
    } 
}); 

僅供參考我搜索谷歌的jquery post with basic auth,這是第一個鏈接。

+0

encodeBase64僅轉換爲基數64.用戶名和密碼基本上都是明文發送。 – bleepzter 2011-05-17 03:05:25

+4

正確,這是基本身份驗證的工作原理。我也不會推薦它,但這是OP要求的。 – mellamokb 2011-05-17 03:06:05

+3

你可以使用https而不是http,那麼它將不會是明文 – beetstra 2012-10-03 13:05:28

-4

簡單。

在asp.net中創建一個對服務的引用。創建一個網頁(沒有UI),並在後面的代碼中創建多個方法,這些方法是該服務的「包裝器」(在C#/ VB.NET中)。使用[WebMethod]裝飾方法並將WebMethod的序列化設置爲JSON。

另外,您可以通過爲json web服務製作封裝來對其他任何語言(pearl,php,或其他)執行相同的操作。

你需要這個包裝的原因是你避免跨站腳本的方式...... JS的侷限性。另外,如果您的頁面通過HTTPS提供,那麼您的包裝器的JS調用也將通過HTTPS進行,因此不必擔心安全問題。

你的JS包裝將採取協商的連接,認證等保健...

其他網頁中的JavaScript可以發佈到該頁面中的方法爲:

$.post('pagename/method_name', {data:value}, callback(){ 

}); 

或$ .post,$ .get,$ .ajax ...都會工作。

+4

-1:不解決問題。 OP沒有提及服務器端技術。 – 2011-05-17 04:13:41

+0

@bleepzter:哇,夥計。放鬆!你在這裏有一個很好的答案,但是對於OP的情況可能沒有必要。我知道你的感受,但我在腰帶上用'-1'有很多答案。沒關係,這是學習過程的一部分,好的。掛在那裏:) – mellamokb 2011-05-17 05:02:18

+0

bleepzter - 老實說,如果你不能接受一點批評,你會很難在這項工作。 2個互聯網點幾乎不值得那麼麻煩。 – Kobi 2011-05-17 05:15:39

7

下面是用jQuery做您的拷貝和粘貼需求的方式:

$.ajax({ 
    url: "/somewhere", 
    beforeSend: function(xhr) { 
     xhr.setRequestHeader("Authorization", "Basic " + window.btoa(username + ":" + password)); 
    }, 
    success: function(result) { 
     console.log(arguments); 
    } 
}); 
相關問題