2011-03-10 1 views
5

У меня есть этот код (ниже) ..Jquery данные кодирования Аякса

$.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" 
}); 

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

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

Благодаря

+0

почему это кажется сумасшедшим? не является ли нормальным перенос данных безопасно? – yoavmatchulsky

+0

Итак, что вы говорите, эти персонажи небезопасны, чтобы пройти через веб-службу? Какой урон они могут сделать? – tmutton

+2

$ .ajax будет делать кодировку автоматически в любом случае, не так ли? –

ответ

4

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

JQuery $ .ajax по умолчанию CONTENTTYPE является применение/х-WWW-форм-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 + '"}', 
}); 
+0

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

+0

Проблема теперь не в специальных символах, а в символах новой строки или возвращается. Если я помещаю в текст возвращаемую строку, она не отправляется в веб-службу. Есть ли быстрое решение для этого? – tmutton

+0

Итак, вы исправили специальные символы, хорошо. Не видя кода, я не могу быть уверенным, почему он не публикует ваш веб-сервис. Попробуйте это, активируйте Net Panel (с Firebug, под вкладкой ** Net **) и сделайте запрос ajax, посмотрите, какой код ошибки возвращается сервером. – suhendri

10

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

$.ajax 
({ 
... 
data: {stars: stars, rating: rating...(etc)} 
}); 
+0

Это сработало для меня. Если бы я использовал строку запроса для данных, а в ней был +, это стало бы местом, когда мой сервлет извлек ее, хотя я не изменил тип contentType, поэтому он должен был закодировать его. Когда я перехожу к этому методу выше, мой сервлет видит + правильно в данных. – mikato