0

タイトルが示すとおり、次のようになります。

サーバーに対してajaxリクエストを実行すると、403で応答しますが、取得してlocalStorageに保存したいヘッダーがあります。これはphonegapアプリ(AndroidおよびiOS)用であるため、開始ドメインはLocal(file://)です。呼び出しを実行するときに、次のコードを使用して応答をインターセプトしようとしましたが、未定義または空の文字列が返されます。

アヤックス:

    $.ajax({
        url: serverLink+action,
        type: "POST",
        data: "access_token="+accessToken+"&uid="+uid,
        crossDomain: true,
        complete: function(resp){
            var header = resp.getAllResponseHeaders();
            var match = header.match(/(Set-Cookie|set-cookie): (.+?);/);
            if (match) session = match[2];
            console.log(header, session)
        }
    })

応答ヘッダー

Connection  Keep-Alive
Content-Encoding    gzip
Content-Length  1198
Content-Type    text/html
Date    Fri, 13 Apr 2012 22:51:02 GMT
Keep-Alive  timeout=15, max=100
Server  Apache/2.2.14 (Ubuntu)
Set-Cookie  sessionid=ebd26167e32bada2d2ed0bd3cc16d8a2; expires=Fri, 27-Apr-2012 22:51:02 GMT; Max-Age=1209600; Path=/
Vary    Cookie,Accept-Encoding

さらに読んで、ここにたどり着きました。ここでは、djangoサーバー上のCSRFについて説明しています。私たちはdjangoサーバーを使用していますが、これまたは403のいずれかが問題だと思います。WebviewからCookieを収集し、後続のリクエストでサーバーに送り返す方法は(そこにある回答例から)ないようです。

4

2 に答える 2

1

jquery XHRオブジェクトを使用します。これは、メソッドgetAllResponseHeaders()として、必要なものを提供する必要があります。

http://api.jquery.com/jQuery.ajax/

于 2012-04-13T23:07:54.890 に答える
0

この問題は、間違いなく django サーバーの CSRF 保護が原因でした。これを回避する唯一の方法は、django に従って回避策を無効にするか実装することです。

実際、この投稿は非常に役立ちました: Django CSRF check fails with a Ajax POST request

于 2012-05-09T17:22:39.300 に答える