2009-08-20 13 views
5

Rozejrzałem się i próbuję znaleźć eleganckie rozwiązanie tego problemu, a jeszcze go nie znajduję. Mam usługę sieciową ASMX w .NET, które próbuję wywołać, wymaga parametrów.Przesyłanie pojedynczych cytatów za pomocą jQuery, Ajax i JSON

używam jQuery po stronie klienta, aby zadzwonić do serwisu i mój kod jQuery wygląda mniej więcej tak:

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

działa bardzo dobrze, z wyjątkiem obu nazwy lub informacji zawierać " znak, pojedynczy cytat. Proste, ponieważ mój JSON definiuje koniec wartości pola i jest pojedynczym cytatem. Gdy którekolwiek z tych pól zawiera pojedynczy cytat, otrzymuję tylko "Wewnętrzny błąd serwera", ale dalsza inspekcja z użyciem Fiddler pokazała mi wyniki (nie zawracam sobie głowy ich publikowaniem) wskazujące na problem pojedynczego cytatu.

Umieściłem coś tymczasowo, aby usunąć pojedyncze cytaty po stronie klienta i umieścić je z powrotem po stronie serwera, ale to daleki od elegancji. Czy istnieje bardziej elegancki sposób na uniknięcie tych pojedynczych cytatów, aby mój kod mógł działać?

Odpowiedz

9

Dane techniczne mówią, że w JSON można używać tylko podwójnych cudzysłowów wokół klawiszy i wartości, więc spróbuj z podwójnymi cytatami. Jestem prawie pewien, że twój błąd zostanie rozwiązany.

Możesz użyć json.js do kodowania/ucieczki znaków specjalnych w rzeczywistej wartości, więc nie napotkasz problemy z wartościami zawierającymi "na przykład, albo metodą stringify od http://www.json.org/js.html.

+0

wielką odpowiedź, dzięki. Użyłem json.js i JSON.encode (myobject) zamiast budować ciąg. – Odd

+0

W przeglądarkach, które go obsługują (wszystkie przeglądarki w bieżącej wersji) powinieneś raczej preferować rodzimy obiekt JSON (http://blogs.msdn.com/ tj./archive/2008/09/10/native-json-in-ie8.aspx) jeśli json.js nie zrobi tego automatycznie. – EricLaw

Powiązane problemy