setRequestHeader不使用jQuery JSONP工作(setRequestHeader

2019-06-24 08:11发布

我建立使用jQuery移动,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

setRequestHeader没有添加标题。

我究竟做错了什么?

请记住,在服务器端进行设置已经返回JSONP,我不认为我们需要进行更改,但任何想法将有助于

提前致谢

Answer 1:

作为jfriend00说,

JSONP请求不使用实际的Ajax调用,您可以控制HTTP请求。

然而,在你的情况 - 你正在尝试添加是基本授权头 - 你可以直接注入到这一点的URL,因为你“通常”做。 因此,在验证http://example.com对用户“用户”和密码“通行证”,网址是HTTP://用户:pass@example.com/ 。



Answer 2:

JSONP请求不使用实际的Ajax调用,您可以控制HTTP请求。

相反,它注入脚本代码到你的页面,然后在浏览器请求该脚本文件的src。 则返回执行,并通过该JavaScript执行(调用回调函数)进行通信回到它的结果得到的脚本。 由于该请求是通过脚本标签插入,而不是直接的Ajax调用产生的,不存在设置上JSONP请求请求头的能力。

如果您的请求是跨域,然后JSONP是你的唯一机制。

如果你的要求是相同的来源页面(不跨域),那么你可以调整你的要求是一个实际的AJAX调用返回JSON数据。 如果你这样做,你可以对AJAX调用设置请求头。



文章来源: setRequestHeader does not work in JSONP using jQuery