Javascript 主干发送请求负载,而不是FormData
我尝试使用主干收集的创建方法将一些数据发布到服务器,如下所示:Javascript 主干发送请求负载,而不是FormData,javascript,jquery,http,rest,backbone.js,Javascript,Jquery,Http,Rest,Backbone.js,我尝试使用主干收集的创建方法将一些数据发布到服务器,如下所示: this.collection.create(modelData, { wait:true, contentType:"application/x-www-form-urlencoded" }); 这里,模型数据包含格式良好的JSON对象。问题是post请求总是被取消。发送的数据以requestpayload的形式存在 使用一些REST客户端 我能够轻松发布,因为它使用formData而不是requestPayload发送数据 有
this.collection.create(modelData,
{
wait:true,
contentType:"application/x-www-form-urlencoded"
});
这里,模型数据包含格式良好的JSON对象。问题是post请求总是被取消。发送的数据以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
});
如果需要将请求作为formData发送,则应在请求中使用
emulateJSON:true
选项
如果您使用的旧web服务器无法处理编码为application/json的请求,请将Backbone.emulateJSON=true;将导致JSON在模型参数下序列化,并使用application/x-www-form-urlencoded MIME类型发出请求,就像来自HTML表单一样
或者,如果您的所有请求都需要使用emulateJSON
,您可以使用Backbone全局设置它。emulateJSON=true代码>
更新:
如果确实需要将FormData对象发送到服务器,则需要修改模型/集合的同步,以便在将其发送到服务器之前自己生成它。以下是您可以尝试(未经测试)的内容:
提供了一个很好的示例。是的,如果希望$,您必须手动创建自己的FormData
存储并将其作为数据发送。ajax
以FormData
而不是请求有效负载的形式发送数据
你可以这样做:
var formData = new FormData();
for ( key in modelData ) {
data.append(key, modelData[key]);
}
this.collection.create(modelData, {
wait:true,
data: formData,
processData: false
});
您可以查看“只需打开开发人员工具”,并在请求的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);
}
});
var formData = new FormData();
for ( key in modelData ) {
data.append(key, modelData[key]);
}
this.collection.create(modelData, {
wait:true,
data: formData,
processData: false
});