2011-05-17 32 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); 
    } 
}); 
相关问题