JQuery AJAX кодирование данных - PullRequest
6 голосов
/ 10 марта 2011

У меня есть этот код (ниже) ..

$.ajax
({
    type: "POST",
    url: "../WebServices/Feedback.svc/sendfeedback",
    dataType: 'json',
    async: false,
    data: '{"stars": "' + stars + '", "rating" : "' + rating + '", "note" : "' + encodeURIComponent(note) + '", "code" : "' + code + '", "permission" : "' + permission + '"}',
    contentType: "application/json; charset=utf-8"
});

Я использую его для передачи данных в веб-службу, но проблема в том, есть ли там какие-либо символы, подобные этому (, /?: @ & = + $ #).Я вставил кодирующий URIComponent, который работает нормально, а затем в веб-сервисе я снова их вернул.

Что я спрашиваю, есть ли лучший способ сделать это?Кажется немного сумасшедшим, что мне приходится каждый раз кодировать строку перед тем, как ее пропустить ...

Спасибо

Ответы [ 2 ]

11 голосов
/ 10 марта 2011

передать данные как объект вместо строки:

$.ajax
({
...
data: {stars: stars, rating: rating...(etc)}
});
5 голосов
/ 10 марта 2011

Веб-сервис принадлежит вам или вы используете чужой веб-сервис?По какой причине веб-служба не принимает (, /?: @ & = + $ #)?

jQuery $. Ajax тип контента по умолчанию - application / x-www-form-urlencoded , что означает, что jQuery будет кодировать содержимое.Однако, поскольку вы указали другой contentType, данные не закодированы, поэтому вам нужно выполнить свою собственную кодировку.

В качестве альтернативы, вы можете попробовать удалить параметр contentType и передать свой контентобычно (без encodeURICompnent ).

$.ajax
({
    type: "POST",
    url: "../WebServices/Feedback.svc/sendfeedback",
    dataType: 'json',
    async: false,
    data: '{"stars": "' + stars + '", "rating" : "' + rating + '", "note" : "' + note + '", "code" : "' + code + '", "permission" : "' + permission + '"}',
});
...