2012-04-19 2 views
1

クライアントに接続できません:ChromeブラウザのJavaScriptの サーバー:はGoogle App Enging、Javaサーブレット 私はここで、サーバ側からトークンを取得しようとしていますが、私のjsのコードは次のとおりです。のXMLHttpRequestでは、GoogleのApp Enging

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); 

と私のサーブレットサーバコード:

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

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

あるのですが、私はそれが動作しない、完全なURLを追加した後、どのように来ますか? 状態= 0、ない200

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は 'error'です。

+0

jsが動作しているページも、 'myapp.appspot.com'、またはlocalhostのような場所にホストされていますか? –

+0

jsクライアントのページがローカルです(myapp.appspot.comでホストされていません) –

答えて

1

あなたのページがlocalhostでホストされている場合、ブラウザはSame Origin Policyのために有効なリクエストをアプリケーションエンジンに送信しません。 OPTリクエスト、またはあなたに本当の応答をもたらさない他のナンセンスを送信する可能性があります。

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

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

+0

iOS/Androidにhtml5/jsアプリケーションをデプロイすると、まだlocalhostですか?申し訳ありませんが、私はWebコーディングに新しいです:( –

+0

XMLHttpRequestはモバイルアプリケーションの目的には適していません。本には5つの方法があります。 1. XMLHttpRequest 2.動的スクリプトタグの挿入3. iframe 4.彗星5 Multipart XHR、どちらが適していますか?ありがとう! –

関連する問題