簡體   English   中英

將JSON編碼為Backbone.Model.save的URL參數(patch = true)

[英]Encoding JSON to URL params for Backbone.Model.save (patch = true)

我在正確形成Backbone.Model.save調用方面遇到了一些麻煩。 我正在調用的Web服務使用URL參數,但我在Javascript中擁有的是更改字段的對象。 例如,我有對象{foo: 'bar', yar: 'har'} ,我希望Backbone.Model.save將補丁請求發送到http://server/path/to/service?foo=bar&yar=har這樣的URL http://server/path/to/service?foo=bar&yar=har

聽起來很簡單吧? 無論如何,它給了我一堆麻煩。 這是我到目前為止所做的事情(這不起作用;我也有成功/錯誤回調,但我不認為這些對於這個問題很重要):

object = 
    foo: 'bar', 
    yar: 'har'

model.save object,
    patch: true

我也嘗試過其他一些選擇:

model.save object,
    patch: true
    emulateJSON: true

這將contentType設置為“application / x-www-form-urlencoded”,這很好,但是Backbone.sync在ajax請求中發送的數據是:{model:“{”foo“:”bar“,”yar“ :“har”}“。 該服務得到了,並不知道如何處理“模型”屬性。

model.save object,
    patch: true
    contentType: "application/x-www-form-urlencoded"

這只是將object編碼為字符串並將其填充到options.data 同樣,該服務不知道如何處理它。

關於如何使其符合我的服務規范的任何其他想法? 我可以自己做ajax調用並自己更新模型(以及它所屬的集合),但我真的不願意這樣做。 對我有用的ajax請求是:

$.ajax
    url: "http://server/path/to/service"
    type: "PATCH"
    data: object

更新:我的兩個早期選項不起作用的原因在Backbone.js本身很清楚:

// Ensure that we have the appropriate request data.
if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {
  params.contentType = 'application/json';
  params.data = JSON.stringify(options.attrs || model.toJSON(options));
}

// For older servers, emulate JSON by encoding the request into an HTML-form.
if (options.emulateJSON) {
  params.contentType = 'application/x-www-form-urlencoded';
  params.data = params.data ? {model: params.data} : {};
}

看着這個,我想也許如果我將對象填充到options.data並將其發送到空屬性中,也許它可以工作:

model.save {},
    patch: true
    data: object

顯然,這試圖修補一個選項“[object Object]”。 我想它確實是對象的字符串化...某處...但這可能接近正確的答案?

看起來我正在尋找的是jQuery.ajaxprocessData選項。 Backbone.sync默認執行以下操作:

// Don't process data on a non-GET request.
if (params.type !== 'GET' && !options.emulateJSON) {
  params.processData = false;
}

因此,我沒有將對象處理為URL參數。 (jQuery API)

因此,一段代碼將是:

model.save {},
    patch: true
    data: object
    processData: true

事實上,我可能沒有正確地使用Backbone.Model ...但是,至少它是有效的。 :P

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM