Js 使用参数获取

文件之后,我做到了:

var collection = new Backbone.Collection.extend({
model: ItemModel,
url: '/Items'
})


collection.fetch({ data: { page: 1} });

网址是: http://localhost:1273/Items?[object%20Object]

我还以为是 http://localhost:1273/Items?page=1

那么,如何在 get 方法中传递 params 呢?

141851 次浏览

改变:

collection.fetch({ data: { page: 1} });

致:

collection.fetch({ data: $.param({ page: 1}) });

所以不需要过度操作,就可以用 {data: {page:1}}对象作为 options调用这个函数

Backbone.sync = function(method, model, options) {
var type = methodMap[method];


// Default JSON-request options.
var params = _.extend({
type:         type,
dataType:     'json',
processData:  false
}, options);


// Ensure that we have a URL.
if (!params.url) {
params.url = getUrl(model) || urlError();
}


// Ensure that we have the appropriate request data.
if (!params.data && model && (method == 'create' || method == 'update')) {
params.contentType = 'application/json';
params.data = JSON.stringify(model.toJSON());
}


// For older servers, emulate JSON by encoding the request into an HTML-form.
if (Backbone.emulateJSON) {
params.contentType = 'application/x-www-form-urlencoded';
params.processData = true;
params.data        = params.data ? {model : params.data} : {};
}


// For older servers, emulate HTTP by mimicking the HTTP method with `_method`
// And an `X-HTTP-Method-Override` header.
if (Backbone.emulateHTTP) {
if (type === 'PUT' || type === 'DELETE') {
if (Backbone.emulateJSON) params.data._method = type;
params.type = 'POST';
params.beforeSend = function(xhr) {
xhr.setRequestHeader('X-HTTP-Method-Override', type);
};
}
}


// Make the request.
return $.ajax(params);
};

因此,它将“数据”发送给 JQuery ajaxJQuery ajax将尽最大努力将 params.data附加到 URL。

还可以将 processData 设置为 true:

collection.fetch({
data: { page: 1 },
processData: true
});

Jquery 将自动将数据对象处理为参数字符串,

但在 Backbone.sync 中, Backbone 关闭 processData,因为 Backbone 将使用其他方法来处理数据 在邮件,更新..。

来源:

if (params.type !== 'GET' && !Backbone.emulateJSON) {
params.processData = false;
}

另一个使用钛合金的例子是:

 collection.fetch({
data: {
where : JSON.stringify({
page: 1
})
}
});
try {
// THIS for POST+JSON
options.contentType = 'application/json';
options.type = 'POST';
options.data = JSON.stringify(options.data);


// OR THIS for GET+URL-encoded
//options.data = $.param(_.clone(options.data));


console.log('.fetch options = ', options);
collection.fetch(options);
} catch (excp) {
alert(excp);
}