Представление в одинарных кавычках с использованием jQuery, Ajax и JSON - PullRequest
5 голосов
/ 20 августа 2009

Я оглянулся вокруг, и я пытаюсь найти элегантное решение для этого, и я еще не нашел его. У меня есть веб-сервис ASMX в .NET, который я пытаюсь вызвать, для которого требуются параметры.

Я использую jQuery на стороне клиента для вызова службы, и мой код jQuery выглядит примерно так:

$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    url: "/Reviews/HotelReview.asmx/SubmitReview",
    data: "{'name': '" + name + "', " +
        "'info': '" info + "'}",
    processData: true,
    beforeSend: function() { startSubmit(); },
    complete: function() { submitComplete(); },
    error: function(xhr) { submitError(xhr); },
    success: function(msg) { submitSuccess(msg.d); }
});

Работает очень хорошо, за исключением случаев, когда name или info содержат символ ', заключенный в одинарную кавычку. Достаточно просто, потому что мой JSON определяет конец значения поля и представляет собой одинарную кавычку. Когда любое из этих полей содержит одну кавычку, я получаю только «Внутреннюю ошибку сервера», но дальнейшая проверка с использованием Fiddler показала мне результаты (я не буду их публиковать), указывающие на одинарную кавычку выпуск.

Я временно ввел что-то на место, чтобы убрать одинарные кавычки на стороне клиента и вернуть их обратно на стороне сервера, но это далеко не элегантно. Есть ли более элегантный способ избежать этих одинарных кавычек, чтобы мой код мог работать?

1 Ответ

9 голосов
/ 20 августа 2009

В спецификациях сказано, что в JSON вы можете использовать только двойные кавычки вокруг ключей и значений, поэтому попробуйте использовать двойные кавычки. Я уверен, что ваша ошибка будет решена.

Возможно, вы захотите использовать json.js для кодирования / экранирования специальных символов в фактических значениях, чтобы не возникало проблем со значениями, содержащими «например», или методом stringify из http://www.json.org/js.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...