Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干发送请求负载,而不是FormData_Javascript_Jquery_Http_Rest_Backbone.js - Fatal编程技术网

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
});