1

クライアント: Chrome ブラウザーの JavaScript サーバー: Google App Enging、Java サーブレット サーバー側からトークンを取得しようとしています。これが私の js コードです:

var httpRequest;
if (window.XMLHttpRequest) {
  // Mozilla, Safari, Chrome,...
  httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) {
  // ...
}
if (!httpRequest) {
  alert('Giving up :( Cannot create an XMLHTTP instance');
  return false;
}
httpRequest.open('POST', 'http://myapp.appspot.com/gettoken?userid=ethan', true);

そして私のサーブレットサーバーコード:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
String userId = request.getParameter("userid");
if (userId != null && !"".equals(userId)) {
  String token = createChannel(userId);
  writeIntoChannel(response,token);
}
}

基本的に GAE の CodeLabEx4 と同じですが、js コードをクライアント側に移動しているだけです。その元のコードは

httpRequest.open('POST', '/gettoken?userid=ethan', true);

それは機能しますが、完全な URL を追加しても機能しないのはなぜですか? ステータス = 200 ではなく 0

httpRequest.open('POST', 'http://myapp.appspot.com/gettoken?userid=ethan', true);

/////////////////////////////////////////////// //////////////////

いくつかの調査の後、クエリを実行するために ajax() を使用するように更新しました。

$.ajax({
    url : 'http://myapp.appspot.com/gettoken?userid=xxx',
                            type : "POST",
                            data:null,
                            success : function(data) {                                  
                                alert('ok!');
                            },
                            error: function(data) {
                                alert(data.statusText);
                            },
                            complete : function() { 
                                //alert("always"); 
                            },

                        });

しかし、返された data.statusText は「エラー」です。

4

1 に答える 1

1

ページが でホストされている場合、 Same Origin Policylocalhostにより、ブラウザーはアプリ エンジンに有効なリクエストを送信しません。リクエストを送信している可能性があります。または、実際の応答が得られないその他のナンセンスです。OPT

SOP が問題であることを示すもう 1 つの手がかりは、応答コードが0. (参照: http://en.wikipedia.org/wiki/List_of_HTTP_status_codes )。0は実際の HTTP 応答コードではありません。

このページをアプリ エンジンでホストするか、ブラウザで SOP を無効にしてください。

于 2012-04-19T04:01:51.487 に答える