0

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 (Unauthorized) を取得します。


    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 を返すように設定されていることに注意してください。ここで変更を加える必要はないと思いますが、何か考えが役立つと思います

前もって感謝します

4

2 に答える 2

4

JSONP リクエストは、http リクエストを制御できる実際の ajax 呼び出しを使用しません。

代わりに、スクリプト タグをページに挿入し、ブラウザはそのスクリプト src ファイルを要求します。返された結果のスクリプトが実行され、その JavaScript の実行 (コールバック関数の呼び出し) を介してその結果が返されます。リクエストは直接の ajax 呼び出しではなくスクリプト タグの挿入によって生成されるため、JSONP リクエストにリクエスト ヘッダーを設定する機能はありません。

リクエストがクロスドメインの場合、JSONP が唯一のメカニズムです。

リクエストがページと同じオリジン (クロスドメインではない) の場合、リクエストを再構築して、JSON データを返す実際の ajax 呼び出しにすることができます。そうすれば、ajax 呼び出しでリクエスト ヘッダーを設定できます。

于 2012-05-11T07:06:19.070 に答える
3

jfriend00言うように、

JSONPリクエストは、HTTPリクエストを制御できる実際のajax呼び出しを使用しません。

ただし、あなたの場合(基本認証である追加しようとしているヘッダー)は、「通常」行うように、それをURLに挿入することができます。したがって、ユーザー「user」とパスワード「pass」を使用してhttp://example.comで認証するには、URLはhttp:// user:pass@example.com/になります。

于 2012-05-11T07:19:58.467 に答える