Когда у меня есть этот кодНевозможно установить тип содержимого для «приложения/JSON» в jQuery.ajax
$.ajax({
type: 'POST',
//contentType: "application/json",
url: 'http://localhost:16329/Hello',
data: { name: 'norm' },
dataType: 'json'
});
в Fiddler я могу увидеть следующее сырого запроса
POST http://localhost:16329/Hello HTTP/1.1
Host: localhost:16329
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://localhost:14693/WebSite1/index.html
Content-Length: 9
Origin: http://localhost:14693
Pragma: no-cache
Cache-Control: no-cache
name=norm
Но то, что я пытается установить тип контента с application/x-www-form-urlencoded to application/json. Но этот код
$.ajax({
type: "POST",
contentType: "application/json",
url: 'http://localhost:16329/Hello',
data: { name: 'norm' },
dataType: "json"
});
Формирует странный запрос (который я могу увидеть в Fiddler)
OPTIONS http://localhost:16329/Hello HTTP/1.1
Host: localhost:16329
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Origin: http://localhost:14693
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Pragma: no-cache
Cache-Control: no-cache
Почему это? Что такое ОПЦИИ, когда он должен быть там? И где мой контент-тип установлен в application/json? И параметры запроса по какой-то причине пошли.
UPDATE 1
На стороне сервера у меня есть очень простой RESTful обслуживание.
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class RestfulService : IRestfulService
{
[WebInvoke(
Method = "POST",
UriTemplate = "Hello",
ResponseFormat = WebMessageFormat.Json)]
public string HelloWorld(string name)
{
return "hello, " + name;
}
}
Но по какой-то причине я не могу назвать этот метод параметрами.
UPDATE 2
Извините за не отвечать так долго.
Я добавил эти заголовки для моего сервера ответа
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Methods: POST, GET, OPTIONS
Это не помогло, я метода не имеет ошибки от сервера.
Вот что мой скрипача говорит
Итак, теперь я могу быть уверен, что мой сервер принимает POST, GET, OPTIONS (если заголовки ответа работать, как я ожидал). Но почему «Метод не разрешен»?
В WebView ответа от сервера (вы можете увидеть Raw ответ на картинке выше) выглядит следующим образом
вы должны попробовать JSON.stringfy() метод –
NOP, не помогло –
посмотреть здесь. Это работает для меня очень хорошо: http://stackoverflow.com/questions/9754767/cannot-set-content-type-to-application-json-in-jquery-ajax/18740041#18740041 – Fanda