我正在使用jQuery Mobile,jQuery 1.7.2和PhoneGap构建iPhone应用程序
尝试使用此代码从ASP.NET RESTful Web服务获取JSONP,我需要首先进行身份验证并获取令牌,然后再将其发回.
这是我的功能:
var setToken = function () { var serverToken = ''; $.support.cors = true; jQuery('body').ajaxSend(function (evt,xhr) { xhr.setRequestHeader("Authorization","Basic " + $.base64.encode(username + ":" + password)); xhr.setRequestHeader('X-Accept','application/json'); }); $.getJSON(url + "?jsoncallback=?",null,function (res) { console.log(res); serverToken = res.Token; }); $('body').ajaxSend(function (evt,xhr,ajaxOptions) { xhr.setRequestHeader('NewToken',serverToken); }); };
我得到401(未经授权)
检查标题:
Request URL:http://192.168.0.44/call/?jsoncallback=jQuery17206244203052483243499_132336710607307&_=1336742104278 Request Method:GET Status Code:401 Unauthorized Request Headers Accept:*/* Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 Accept-Encoding:gzip,deflate,sdch Accept-Language:en-US,en;q=0.8 Connection:keep-alive Host:192.168.0.44 Referer:http://localhost/myMobileApp/ User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.19 (KHTML,like Gecko) Chrome/18.0.1025.168 Safari/535.19 Query String Parametersview URL encoded jsoncallback:jQuery17206244203052483243499_132336710607307 _:1336710704278 Response Headers Access-Control-Allow-Origin:* Cache-Control:private Content-Length:0 Date:Fri,11 May 2012 04:31:52 GMT Server:Microsoft-IIS/7.5 WWW-Authenticate:Basic X-AspNetMvc-Version:3.0 X-Powered-By:ASP.NET
我究竟做错了什么?
请记住,服务器端已经设置为返回JSONP,我认为我们不需要在那里进行更改,但任何想法都会有所帮助
提前致谢
解决方法
正如jfriend00所说,
A JSONP request does not use an actual ajax call where you can control the HTTP request.
但是在您的情况下 – 您尝试添加的标头是基本授权 – 您可以将其注入URL,就像您“通常”那样.因此,要使用用户“user”和密码“pass”在http://example.com进行身份验证,URL将为http://user:pass@example.com/.