Единственное, что вы могли бы сделать в будущем, это добавить метод toJSON
:
Если объект, подвергаемый строковому форматированию, имеет свойство с именем toJSON
, значение которого является функцией, то метод toJSON
настраивает поведение строковой JSON: вместо сериализуемого объекта будет возвращено значение, возвращаемое методом toJSON
при вызове.
Это более или менее похоже на to_json
в Rails.К сожалению, jQuery не будет вызывать его автоматически, но библиотека JSON будет и Backbone (если вы в конечном итоге используете Backbone);добавление метода toJSON
также позволяет объекту управлять собственной сериализацией.
Затем добавьте вызов toJSON
к вашему $.ajax
:
$.ajax(
type: "POST"
url: '/crosses/save'
data: cross_data.toJSON()
contentType: 'json'
success: (msg) ->
alert( "Data Saved: " + msg )
)
Или, с недавним JQuery,Вы можете настроить предварительный фильтр AJAX для автоматического вызова toJSON
, когда он доступен:
$.ajaxPrefilter( (opts, original_opts) ->
if(original_opts.data && original_opts.data.toJSON && $.isFunction(original_opts.data.toJSON)
opts.data = $.param(original_opts.data.toJSON())
)
Тогда, если вы позвонили $.ajax
с data
, который имелtoJSON
метод, toJSON
будет вызван для сериализации объекта data
.
Вы также можете настроить простой рекурсив $.ajaxPrefilter
, чтобы автоматически пропустить что-либо в original_opts.data
, $.isFunction
обнаружено как функция.Вы можете использовать $.isPlainObject
, чтобы пропустить data
, которое уже является строкой.
Я не знаю ни одного плагина, который делает это автоматически.