jquery ajax 由于 options.data 未为 Backbone.js 集合定义而失败
jquery ajax failing due to options.data being undefined for Backbone.js collections
我正在尝试从我的 .asmx 网络方法中取回一些数据,但它在 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()
});
我的 web 方法 GetUsers
有 1 个参数,一个名为 groupID 的整数。根据此页面:http://backbonejs.org/#Collection-constructor,在创建 Collection 时调用 MyListView.Collection 中的初始化方法,这发生在实例化 MyListView 时。
错误发生在文件 jquery-1.12.3.js 的以下行中:
xhr.send( ( options.hasContent && options.data ) || null );
在这里,options.data是undefined
。但是,url 属性 选项是正确的。那么为什么 jquery ajax 无法识别我传入的数据?
默认情况下,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);
},
我正在尝试从我的 .asmx 网络方法中取回一些数据,但它在 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()
});
我的 web 方法 GetUsers
有 1 个参数,一个名为 groupID 的整数。根据此页面:http://backbonejs.org/#Collection-constructor,在创建 Collection 时调用 MyListView.Collection 中的初始化方法,这发生在实例化 MyListView 时。
错误发生在文件 jquery-1.12.3.js 的以下行中:
xhr.send( ( options.hasContent && options.data ) || null );
在这里,options.data是undefined
。但是,url 属性 选项是正确的。那么为什么 jquery ajax 无法识别我传入的数据?
默认情况下,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);
},