0

我有以下骨干模型

define(["jquery", "underscore", "backbone"],
    function ($, _, Backbone) {
        var file_upload = Backbone.Model.extend({
        url: 'http://localhost:8080/rest/customForms'

    });

    return file_upload;
}

我有一个加载的视图

本地主机:38559/app/forms.html

它尝试使用以下代码发布帖子

var fd = document.getElementById('fileToUpload').files[0];
var file = new file_upload();
file.fetch({data: $.param({fileToUpload: fd}), 
    type: 'POST', 
    success: function(d){
        console.log('success');
    }
});

但这似乎只是对 forms.html 发出 get 请求,将 fd 作为参数传递。我也尝试过覆盖 file_upload 中的同步方法

sync: function (method, model, options) {
    var self = this;
    options = _(options).clone();

    var error = options.error;
    options.error = function (jqXHR, textStatus, errorThrown) {
        alert('error');
        if (error)
            error(jqXHR, textStatus, errorThrown);
    };

    var success = options.success;
    options.success = function (data, textStatus, jqXHR) {
        if (success && data) {
            alert("Success uploading form.");
            success(data, textStatus, jqXHR);
        }
        else
            alert("Error uploading form. Please try entering again.");
        };

        var params = {
            type: 'POST'
        };
        $.ajax(_.extend(params, options));
    }
}

我正在使用类似代码在应用程序的其他部分发布帖子,因此无法弄清楚为什么使用此代码获取对调用它的页面的获取请求,而不是对模型中指定的 url 的发布。有没有人有任何想法?

谢谢, 真皮

4

1 回答 1

0

呃 - 终于找到了这个问题。文件上传是在按钮单击事件上完成的。我需要调用 preventdefault 来强制使用模型 url 而不是页面 url。烦人的问题-不知道我是怎么错过的!现在的代码是

uploadForm: function (e) {
    e.preventDefault();
    var self = this;
    var fd = document.getElementById('fileToUpload').files[0];
    var file = new file_upload();
    file.fetch({data: $.param({fileToUpload: fd}), 
        type: 'POST', 
        success: function(d){
            console.log('success');
        }
    });
},
于 2013-07-24T20:32:54.570 回答