2012-02-29 14 views
0

StackOverflowには多くの関連性の高い質問がありますが、私と一緒にお立ち寄りください。クロスドメインajaxとjQueryを使ったRESTサーバー

私はPhoneGapを使用してモバイルアプリを作成しています。だから、私はjQuery Mobile、HTML、CSSでアプリケーションを書いています。

問題は次のとおりです。サーバーはREST実装です。つまり、新しい 'エンティティ'(ユーザー、車、ホットベイビーなど)を作成するには、サーバーはPOSTリクエストをリッスンします。既存の「エンティティ」を返すことによって、サーバーがGETリクエストに応答する場合。

jQueryからPOSTリクエストを送信するモバイルアプリケーションを取得するにはどうすればよいですか?これは簡単なことですが、jQueryはPOSTを指定してもjsonpデータ型リクエストをGETに変更します。また、サーバーとアプリケーションは同じドメインにないので、この要求はドメイン間で送信されるため、データ型をjsonに設定することはできません。

私はこれを長時間4時間続けています。私はGETリクエストだけを気にしていれば目の瞬きの中で動作させることができますが、サーバー上でPOSTを取得することは今まで不可能であることが証明されています。ここで

は、サーバー側のコードを簡略化したものである:

class GatewayService extends Service[Request, Response] { 
    def apply(request: Request) = { 
    request.method -> Path(request.path) match { 
     case GET -> Root/"car" => { 
     println("---Get car---") 
     } 
     case POST -> Root/"car" => { 
     println("---New car---") 
     } 
     case _ => { 
     println("---Other method type ---") 
     } 
    } 
} 

そしてここでは、jQueryのコードです:あなたはjQueryを使ってPOSTリクエストのクロスドメインの取得上の任意のアイデアを持っている場合は

function serverRequest(formId, url) { 
    var result = "" 
    var formData = readFormData(formId); 
    console.log("Submitting form:\n"+JSON.stringify(formData)); 

    $.ajax({ 
     type:"POST", 
     url: url, 
     data: JSON.stringify(formData), 
     dataType: "json", 
     success: function(response){ 
      alert(response['message']); 
      console.log("Received response: "+JSON.stringify(response)); 
      result = response; 
     }, 
     error: function(jqXHR, textStatus, errorThrown){ 
      console.log(
       "The following error occured: "+ jqXHR, 
       textStatus, errorThrown 
      ); 
     }, 
     complete: function(){ 
      //Nothing here for now 
     } 
    }); 
    return result; 
} 

、あなたの秘密を分けてください。

更新:

これまでのところ、あなたが単にjQueryのモバイル上で開発されたモバイルアプリから直接RESTサーバーにアクセスすることができないことが表示されます。これは正しいです?

答えて

2

JSONPの代わりにCORSを試しましたか?これは現代のすべてのブラウザでサポートされているはずです(したがって、うまくいけば電話でも可能です)。この投稿はそれに関連しています:https://stackoverflow.com/a/8773095/773339

JSONPはGETに限ります。

+0

EasyXDMはCORSの優れた実装で、PhoneGapの魅力のように機能します。ただし、Webサービスを制御する必要があります。 http://easyxdm.net/wp/ – sustainablepace

+0

ありがとうございます。私はこれを調べます。モバイルデバイス(jQuery Mobileを使用)と既存のRESTサーバーとの統合はどのような方法でも複雑になるはずです。 – Jack

0

あなたも知っているように、JSONリクエストまたはJSONPリクエストをPOSTリクエストとして送信することはできません。 JSONまたはJSONPリクエストは常にGETリクエストです。ラウンドを達成するには、ドメイン上のページに投稿し、このページを使用してデータを投稿することができます。 Like:

 

var data ="url=http://www.example.com/post_url.php&parameters=1&para=2"; 
$.ajax({ 
    url: "your_domain_url", 
    data: data, 
    type: "POST", 
    success: function(data, textStatus, jqXHR){ 
    console.log('Success ' + data); 
    }, 
    error: function (jqXHR, textStatus, errorThrown){ 
    console.log('Error ' + jqXHR); 
    } 
}); 
 

あなたのドメインに存在するファイルの投稿データを取得し、そこから投稿してください。 何らかの形で役立つことを願っています。

+0

これは、感謝のためのいくつかの食糧を提供しています、ありがとう。しかしそれは理想的ではありません。私は実際にjQuery MobileとPhoneGapで開発されたモバイルであっても、モバイルからRESTサービスにアクセスするのは非常に簡単であるべきだと考えました – Jack

関連する問題