2013-09-27 6 views
0

Я использую функцию $.ajaxSetup(), чтобы добавить некоторые дополнительные параметры для каждого из моих вызовов AJAX в Spine. Однако он не работает, как я ожидал.

Если я называю $ ajaxSetup() следующим образом, мои запросы GET работать нормально, но мои Титулы будут overidden с любыми запросами POST и не включаются в данные формы, как идентификатор ожидать:

$.ajaxSetup 
     data: "[email protected]&user_token=foobar" 

Как результат я попытался изменить свою строку данных на объект, чтобы увидеть, если это не изменило:

settings = 
     data: 
      user_email:'[email protected]' 
      user_token:'foobar' 

$.ajaxSetup settings 

Однако это вызывает мой URL, в моих запросах появляться уродливы, например, так: http://dev.myapp.com:5000/api/v1/posts?[object%20Object]

Я попытался воссоздать это в JSFiddle (my fiddle), чтобы проверить, что я не сошел с ума, и кажется, что мой подход работает так, как я ожидал бы там. Для запросов GET строка моего объекта данных добавляется к концу моего URL-адреса и с запросами POST объект данных добавляется к данным формы, отправленным с запросом.

Итак, что я делаю неправильно? Это ошибка в спине или что-то еще?

JQuery Версия: 2.0.3

ответ

0

Похоже, проблема в том, что позвоночник устанавливает данные в виде строки:

type: 'POST' 
    contentType: 'application/json' 
    data: @record.toJSON() 

(от the spine source)

Вы можете использовать ajaxPrefilter, чтобы исправить запросы до их отправки. Так как данные строка JSON у вас есть несколько вариантов:

  • добавить свои параметры в формате JSON (путем декодирования его, используя $.extend, а затем кодирования его еще раз)

  • добавить параметры в пользовательских HTTP заголовки вместо POST параметры

  • добавить параметры в URL, даже на POST запросы