2016-08-16 8 views
0

.asmx Webメソッドからデータを取得しようとしましたが、ajax呼び出しで失敗しています。 1つのパラメータ、グループIDという名前の整数をとるGetUsersjquery ajaxがbackbone.jsコレクションのoptions.dataで定義されていないために失敗しました

// BaseCompositeView is basically an object extended from Marionette.CompositeView 
    MyListView = App.Base.Objects.BaseCompositeView.extend({ 
     // contents removed for brevity 
    }); 

    // BaseModel is basically an object extended from Backbone.Model 
    MyListView.Model = App.Base.Objects.BaseModel.extend({ 
     // nothing here 
    }); 

    // BaseCollection is basically an object extended from Backbone.Collection 
    MyListView.Collection = App.Base.Objects.BaseCollection.extend({ 
     url: "../WebServices/MyService.asmx/GetUsers", 

     model: MyListView.Model, 

     initialize: function(options) { 
      this.options = _.extend({}, this.defaults, this.options); 

      this.options.data = JSON.stringify({ 
       "groupID": parseInt(App.Prop.get("GroupID"), 10) 
      }); 
     } 

    }); 

    var group_users_view = new MyListView({ 
     tagname: "div", 
     model: new MyListView.Model(), 
     collection: new MyListView.Collection() 
    }); 

マイウェブ方法:ここに私のJSコードの一部です。このページによると:http://backbonejs.org/#Collection-constructor、MyListView.Collection内のinitializeメソッドは、コレクションの作成時に呼び出されます。これは、MyListViewのインスタンス化時に発生します。

エラーは次の行にファイルjqueryの-1.12.3.js内部で発生します。

ここ
xhr.send((options.hasContent && options.data) || null); 

、options.dataがundefinedです。ただし、オプションのurlプロパティは正しいです。なぜjquery ajaxは私が渡しているデータを認識しないのですか?

答えて

1

デフォルトでは、サーバに送信されたAjaxコールに渡されるthis.optionsオブジェクトとoptionsオブジェクトの間には関係がありません。

ソースコードfetchまたはsyncを読むと、this.optionsを参照してoptionsオブジェクトを構築していないことがわかります。

読み取りと書き込みの両方にデータを設定する必要がある場合は、syncを上書きすることができます。

sync: function sync(method, collection, options) { 
    // It is okay for options to be undefined in the _.extend call. 
    options = _.extend({}, options, this.options); 
    return MyListView.Collection.__super__.sync.call(this, method, collection, options); 
}, 
+0

おかげルイ:あなたはthis.optionsの全てがjQuery.ajaxに渡されるものの一部になりたい場合は、あなたのようなものを持っている可能性が!あなたは絶対に正しいです。私は私のコレクションに同期メソッドを追加する必要がありました。これはパズルの欠けている部分だった。基本的には、ここでは、メソッドが「読み込み」かどうかを確認するための条件を追加し、そうであれば最終的に '$ .ajax()'を呼び出すカスタムメソッドを呼び出します。このカスタムメソッド呼び出しは、私のコレクションのinitializeメソッドで初期化された 'collection.options.data'で渡す場所です。 – SpartaSixZero

関連する問題