2013-05-21 2 views
3

Я использую ASP.NET WebApi для создания моих служб REST. Во многих случаях мне нужно только вернуть сообщение 200 OK (без тела). Реакция обычно выглядит следующим образом (это POST):jQuery 2.0 + ASP.NET WebApi POST пустой ответ = сбой

return this.Request.CreateResponse(HttpStatusCode.OK); 

или

return new HttpResponseMessage(HttpStatusCode.OK); 

Оба работали хорошо в JQuery 1.8, но это потому, что эта версия позволила responseText из «», которые будут использоваться (что это затем пытается запустить parseJSON).

Однако в JQuery 2.0, он заканчивает в deferred.fail() обратного вызова вместо этого, так как считает, что не удалось parseJSON (на пустой текст) является недействительным ..

Как решить эту проблему?

UPDATE

Пример JS вызова, который использует это:

var deferred = $.ajax({ 
    "type": "POST", 
    "url": something, 
    "contentType": "application/json; charset=utf-8", 
    "dataType": "json", 
    "data": JSON.stringify(whatever) 
}); 

deferred.fail(function (msg) { 
    // it ends up in here 
}); 

Вызов может привести ответ JSON, но часто это просто необходимо вернуть 200 OK без тела, поэтому Я все еще указываю dataType/contentType (нет способа узнать заранее, если у него будет тело или нет, у сервера есть логика, чтобы решить это).

+0

Вы можете добавить пример вашего $ .ajax вызова? –

+0

Хорошо, я добавил пример вызова JS ajax – automaton

ответ

4

Ваш dataType установлен в JSON, что означает, что вы ожидаете вернуть JSON с сервера.

Вы можете попробовать изменить это на text, чтобы узнать, устраняет ли это проблему.

Или, если он не всегда пуст, попробуйте оставить его полностью, так как теоретически теория jQuery должна распознавать формат.

Смотрите документацию:

http://api.jquery.com/jQuery.ajax/

Смежные вопросы