我正在尝试从我的.asmx web方法中获取一些数据,但它在ajax调用时失败了。这是我的一些JS代码:
// 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()
});
我的网络方法GetUsers
有1个参数,一个名为groupID的整数。根据这个页面:http://backbonejs.org/#Collection-constructor,在创建Collection时调用MyListView.Collection中的initialize方法,这在实例化MyListView时发生。
错误发生在以下行的文件jquery-1.12.3.js中:
xhr.send( ( options.hasContent && options.data ) || null );
此处,options.data为undefined
。但是,选项的url属性是正确的。那么为什么jquery ajax不能识别我传入的数据呢?
答案 0 :(得分:1)
默认情况下,this.options
与传递给服务器的Ajax调用的options
对象之间没有关系。
如果您阅读fetch
或sync
的源代码,则会看到他们没有引用this.options
来构建他们的options
个对象。
如果您需要将数据设置为读取和写入,则可以覆盖sync
。如果您希望所有this.options
都成为传递给jQuery.ajax
的内容的一部分,那么您可以拥有类似的内容:
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);
},