параметры переноса (cljs-ajax + compojure)

Рассмотрим следующую составную маршрутизацию:

(defroutes main-routes
  (POST "/something" r {:body (prn-str (:params r))}))

(def handler
  (-> main-routes
      (wrap-params)))

При тестировании этого с помощью curl я получаю желаемый результат:

curl -d "a=b" localhost:3000/something
{"a" "b"}

Параметры Post считываются compojure и помещаются в карту параметров.

Однако это не работает с запросом ajax, инициированным библиотекой cljs-ajax:

(POST "/something" {:handler #(js/alert %)
                    :params {"a" "b"}})

Он оповещает "{}". Однако при изменении кода для использования GET он работает. Я предполагаю, что это связано с тем, что браузер отправляет тело как входной поток, а не как обычный текст. Но я не уверен и не знаю, как это исправить.


person Anton Harald    schedule 20.09.2016    source источник
comment
Возможно, вы могли бы попробовать установить {... :format :raw ...} в вызове cljs-ajax?   -  person jsonmurphy    schedule 20.09.2016
comment
Вы проверили, что при использовании cljs-ajax отправляется запрос PUT вместо POST ? Просто говорю.   -  person Marcs    schedule 21.09.2016


Ответы (1)


Похоже, что cljs-ajax по умолчанию отправляет запрос и ответ в формате transit. (См. значения по умолчанию :format и :response-format здесь). Вы можете попробовать указать явный ответ json в карте запроса -

{:handler #(js/alert %)
 :params {"a" "b"}
 :response-format :json}
person nrako    schedule 22.09.2016
comment
Это верно. Существует формат обнаружения, который будет читать заголовки ответа. Это только не по умолчанию, потому что включает в себя много кода в клиенте js. - person Julian Birch; 24.01.2020