如何为backbone.js设置内容类型和POST?

时间:2013-02-06 13:56:54

标签: javascript backbone.js

我可以在backbone.js中设置content-typePOST吗?

this.save(data, {
    success: function (user) {
        callback(user.get('LoginStatus'))
    },

    error: function (user, result, xhr) {

    }
});

当我尝试进行REST服务调用时,我收到了错误请求,它在fiddler中运行。我们需要设置类型和内容类型吗?

这是我得到的错误

[ERROR][TiHttpClient(  636)] (TiHttpClient-1) [13340,13340] HTTP Error (org.apache.http.client.HttpResponseException): Bad Request
[ERROR][TiHttpClient(  636)] org.apache.http.client.HttpResponseException: Bad Request
[ERROR][TiHttpClient(  636)]    at ti.modules.titanium.network.TiHTTPClient$LocalResponseHandler.handleResponse(TiHTTPClient.java:240)
[ERROR][TiHttpClient(  636)]    at ti.modules.titanium.network.TiHTTPClient$LocalResponseHandler.handleResponse(TiHTTPClient.java:199)
[ERROR][TiHttpClient(  636)]    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:657)
[ERROR][TiHttpClient(  636)]    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:637)
[ERROR][TiHttpClient(  636)]    at ti.modules.titanium.network.TiHTTPClient$ClientRunnable.run(TiHTTPClient.java:1217)
[ERROR][TiHttpClient(  636)]    at java.lang.Thread.run(Thread.java:1020)
[ERROR][TiAPI   (  636)]  [REST API] ERROR: " *** FaultException : Object reference not set to an instance of an object."
[ERROR][TiAPI   (  636)]  [REST API] apiCall ERROR: " *** FaultException : Object reference not set to an instance of an object."

2 个答案:

答案 0 :(得分:8)

当主干fetchsave方法包装jQuery.ajax()函数时,您可以通过传入a jQuery.ajax() {{来设置Backbone中的Content-Type和Request方法1}}直接对象settingsfetch函数

例如使用save函数:

fetch

使用myModel.fetch({ type: "POST", contentType: "application/json" }); 函数:

save

另外,我注意到您在myModel.save({ type: "POST", contentType: "application/json" }); 功能中提供了数据属性。如果您想将JSON作为POSTed数据传递给URL,则需要在save函数中使用以下语法:

save

答案 1 :(得分:1)

我不太了解发布的错误,但如果您要做的只是设置内容类型或更改调用中的其他一些默认设置,那么它很有可能。

如果您看一下Backbone中Model原型的save函数,它实际上是使用this.sync或默认的'Backbone.sync'方法来进行调用。检查Backbone.sync函数,您可以看到它实际上是使用jquery的'ajax'方法来进行调用。注意行 return $ .ajax(_.extend(params,options)); 因此你应该能够将任何东西作为jquery的ajax方法所采用的选项传递给它。在同一个同步方法中,您还可以看到它如何设置标准默认内容类型,params.contentType ='application / json';

您还可以为模型编写自己的同步方法,并使用自己的ajax调用更改默认参数。如果您的Model有自己的同步方法,则会调用它而不是默认的Backbone.sync方法。