Backbone.js emulateHTTP and emulateJSON

Backbone.emulateHTTP值為true時,會模擬restful的動作,將delete和put(update) method,全部都用post method代替,然後添加X-HTTP-Method-Override的header和_method的參數。

Example如下:

先建立一個Book Model。

Backbone.emulateHTTP = true;
Backbone.emulateJSON = true;
var Book = Backbone.Model.extend({
  urlRoot:"/books"     
});                      
var book = new Book({id:32});

執行save時,會發送request到server。(在backbone的model id有值的時候,save會是update功能,反之則為create。)

                                                                                                                                                                                            
book.save({name:"Tom"}); 

發送request到server端的header,會添加以下這段:

X-HTTP-Method-Override:PUT

Backbone.emulateJSON為true時,request的content-type會設定為application/x-www-form-urlencoded,傳遞到server參數如下:

model={"id":32,"name":"Tom"}&_method=PUT

Backbone.emulateJSON為false時,request的content-type會設定為application/json,傳遞到server參數如下:

{"id":32,"name":"Tom"}

所以當request的content-type不是application/json時,使用emulateHTTP,會多傳一個_method的參數到server端,可供server辨識。