2

バックエンドとして struts コントローラーを備えた単純なバックボーン アプリケーションがあり、正常に動作していました。次に、クロスドメインリクエスト処理ロジックを含めようとしましたが、クロスドメインリクエストを行うには2つの方法があることがわかりました

  1. JSONP
  2. CORS

今私がやろうとしているのは、ブラウザーが CORS をサポートしていない場合です..次に、JSONP 要求を行う必要があります。CORS (フィルターを使用してヘッダーを追加しただけ) は完了しましたが、この部分は機能していますが、JSONP 要求を正常に行うことができません。

これに関する私の質問は次のとおりです。

  1. サーバー (Struts コントローラー) からの応答はどうあるべきですか? 関数呼び出しのようなものを返しますか? 現在は復帰モデルです。

  2. Backbone js では、Backbone.sync のみをオーバーライドしてデータ型を JSONP にするだけで十分ですか?

注: JSONP 呼び出しで次のエラーが発生します。

エラー: jsonpCallback は呼び出されませんでした

コード: コレクションの同期をオーバーライドしました。私の同期機能は

sync: function(method, model, options) {             
        options.dataType = 'jsonp';
        options.url="http://localhost:8084/CrossDomain_backbone/messages.json";           
        //options.contentType='application/json-p';
        options.error=this.errorr;
        return Backbone.sync(method, model, options);
    }
   ,
    parse: function(resp){
        alert('inside parse..');
        return resp.model;
    },
    errorr:function(response,responseText)
    {
        alert('inside callback..: ' + responseText);
    },

ありがとう。

4

1 に答える 1

2

Struts コードは、データを含む関数呼び出しを返す必要があります。

URL リクエストは次のようになります。

options.url="http://localhost:8084/CrossDomain_backbone/messages.json?callback=?";

クエリ文字列のcallback一部は、Struts コードで使用する必要のあるランダムな関数名に自動的に置き換えられます。

たとえば、JSONP リクエストが作成されると、jQuery (Backbone で使用される) は次のようになります。

http://localhost:8084/CrossDomain_backbone/messages.json?callback=jQuery17205394351207651198_1336231056100

したがって、Struts コードはコールバック パラメータを読み取り、次のような JavaScript を発行します。

jQuery17205394351207651198_1336231056100({
    "name": "Henry T Ford",
    "company": "Ford Motor Company",
    "modified": "2012-04-05T15:06:36Z"});

jQuery は、そのランダムな名前で一時的な関数を作成して応答を受け取り、それを定義済みの成功メソッドに渡します。

于 2012-05-05T15:25:42.070 に答える