3

backbone.js でcontent-typeandを設定できますか?POST

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

    error: function (user, result, xhr) {

    }
});

REST サービス呼び出しを実行しようとすると、不正な要求が発生します。これはフィドラーで機能します。type と Content-type を設定する必要がありますか?

ここに私が得るエラーがあります

[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."
4

2 に答える 2

8

バックボーンfetchsaveメソッドが関数をラップするので、または関数にオブジェクトを直接jQuery.ajax()渡すことで、バックボーンに Content-Type と Request Method を設定できます。jQuery.ajax() settingsfetchsave

たとえば、次のfetch関数を使用します。

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

関数を使用しても同じsaveです:

myModel.save({
    type: "POST",
    contentType: "application/json"
});

saveまた、関数でデータ プロパティを提供していることにも気付きました。JSON を POSTed データとして URL に渡したい場合は、save関数に次の構文が必要です。

myModel.save({
    data: JSON.stringify(myObject),
    type: "POST",
    contentType: "application/json"
});
于 2013-04-16T13:24:16.590 に答える
1

投稿されたエラーはよくわかりませんが、呼び出しでコンテンツタイプを設定するか、他のデフォルト設定を変更するだけであれば、その可能性は十分にあります。

Backbone の Model プロトタイプの保存機能を見ると、実際には this.sync またはデフォルトの 'Backbone.sync' メソッドを使用して呼び出しを行っています。Backbone.sync 関数を確認すると、実際には jquery の「ajax」メソッドを使用して呼び出しを行っていることがわかります。改行に注意 $.ajax(_.extend(params, options)); したがって、jquery の ajax メソッドが取るオプションとして何でも渡すことができるはずです。同じ同期メソッドで、標準のデフォルト コンテンツ タイプ params.contentType = 'application/json'; を設定する方法も確認できます。

モデルの独自の同期メソッドを作成し、デフォルトのパラメーターを変更して独自の ajax 呼び出しを行うこともできます。モデルに独自の同期メソッドがある場合、デフォルトの Backbone.sync メソッドの代わりに呼び出されます。

于 2013-02-07T03:17:26.593 に答える