我正在尝试使用骨干集合的创建方法将一些数据发布到服务器:
this.collection.create(modelData,
{
wait:true,
contentType:"application/x-www-form-urlencoded"
});
此处模型数据包含格式良好的JSON对象。问题是邮件请求总是被取消。发送的数据采用requestpayload的形式。
使用一些REST客户端 我可以轻松发布,因为它使用formData而不是requestPayload发送数据。
任何参赛者?
修改
这是我在网络控制台中获得的:
Request URL:http://myendpointurlhere.com/
Request Headers CAUTION: Provisional headers are shown.
Accept:application/json, text/javascript, */*; q=0.01
Cache-Control:no-cache
Content-Type:application/x-www-form-urlencoded
Origin:http://localhost:8888
Pragma:no-cache
Referer:http://localhost:8888/case/12345
User-Agent:Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
Form Dataview sourceview URL encoded
model:{"startDate":"19/5/2014","acute":"true","terminal":"true","comment":"","name":"Hypothyroidism","caseId":"4872585904914432"}
编辑2
出于某种原因,这对我有用。让我知道你对此的看法:
this.collection.create({},
{
data:modelData,
wait:true,
emulateJSON:true
});
答案 0 :(得分:1)
如果您需要以formData形式发送请求,则应在您的请求中使用emulateJSON:true
选项。 From the docs:
如果您正在使用无法处理编码为application / json的请求的旧版Web服务器,请设置Backbone.emulateJSON = true;将导致JSON在模型参数下被序列化,并且使用application / x-www-form-urlencoded MIME类型进行请求,就好像来自HTML表单一样。
this.collection.create(modelData,
{
wait:true,
emulateJSON:true
});
或者,如果您的所有请求都需要使用emulateJSON
,则可以使用Backbone.emulateJSON=true;
更新
如果您确实需要将FormData对象发送到服务器,则需要修改模型/集合的同步,以便在将其发送到服务器之前自行生成。这是你可以尝试的东西(未经测试):
var YourModel = Backbone.Model.extend({
sync: function(method, model, options){
options = options || {};
var formData = new FormData();
var json = model.toJSON();
_.each(json, function(value, key){
formData.append(key, value);
});
options.data = formData;
options.emulateJSON = true; // Important because your sending formdata
return Backbone.Model.prototype.sync.call(this, method, model, options);
}
});
http://mrjoelkemp.com/2013/09/backbone-js-model-save-without-the-emulatejson-model-attribute/提供了一个很好的例子。
答案 1 :(得分:0)
是的,如果您希望FormData
以data
而不是{$.ajax
向您发送数据,则必须手动创建自己的FormData
商店并将其发送为Request payload
{1}}。
你可以这样做:
var formData = new FormData();
for ( key in modelData ) {
data.append(key, modelData[key]);
}
this.collection.create(modelData, {
wait:true,
data: formData,
processData: false
});
您可以查看JsBin demo here只需打开开发人员工具,看看您在请求的FormData
中是否拥有所需内容。