2011-07-08 15 views
6

Mam ruby ​​hash, gdzie klucze są adresy URL i wartości są liczbami całkowitymi. Konwertuję hasz na JSON i zastanawiam się, czy będę w stanie wysłać JSON wewnątrz adresu URL za pomocą żądania AJAX, a następnie wyciągnąć JSON z skrótu params.Czy możesz wysłać JSON przez adres URL?

Mam zamiar również przesłać skrót mieszany JSONifyed ruby ​​do klienta. Jeśli mam oddzwanianie powodzenia w funkcji AJAX, w której otrzymuję dane w zmiennej data, w jaki sposób mogę parsować ten JSON z JQuery?

Proszę dać mi znać, jeśli chcę być bardziej szczegółowy.

+0

Jeśli robisz żądania AJAX, dlaczego nie POST, a następnie wysłanie JSON jako części adresu URL ... – Endophage

+0

@Endophage, jeśli to zrobiłem, to w jaki sposób mam uzyskać dostęp do JSON z serwera? –

Odpowiedz

10

Tak, możesz bez problemu. Nie jest potrzebne ręczne kodowanie/dekodowanie!

Twój kod będzie tak:

var jsonParam = '{"name":"Edgar"}'; //Sample json param 
$.ajax({ 
    ... 
    type: "get", //This sends in url 
    data: {jsonParam: jsonParam}, //This will encode your json for url automatically 
    dataType: "json", //With this the response will be automatically json-decoded! 
    success: function(response){ //Assuming your server output was '{"lastName":"Villegas"}' as string 
    alert(response.lastName); 
    } 
}); 

Jak widać, nie ma obsługi kodowania/dekodowania było potrzebne. Jquery radzi sobie z tym wszystkim!

Mam nadzieję, że to pomoże. Pozdrowienia

PS: Jeśli z jakiegoś powodu musisz zakodować/odkodować swój json ręcznie w celu uzyskania adresu URL, użyj metod javascript: encodeURIComponent(string) i $.parseJSON(jsonString).

+0

czekaj, więc podając 'dataType:" json "' Nie muszę analizować JSON na serwerze? (np. JSON.parse (json_here)). Ponadto, jeśli zdecyduję się wysłać to jako żądanie POST, w jaki sposób mam uzyskać dostęp do JSON na serwerze w ruby? –

1

Tak, możesz przekazać obiekt Json jako parametr get lub post.

Aby przeanalizować łańcuch Json za pomocą Jquery, można użyć $ .parseJSON.

+0

Miałem na myśli poprzez sam URL. Ale jeśli zrobię POST i wyślę go w opcji 'data', w jaki sposób uzyskam dostęp do niego z kontrolera? –

+0

To zależy od kodu po stronie serwera. Np. W C# można użyć Request [elementName] lub w akcji kontrolera można podać dokładną nazwę parametru, która zostanie automatycznie wypełniona podczas wykonywania akcji. – ShankarSangoli

+0

@ShankarSangoli To zadziała, ale czy dobrą praktyką jest przekazywanie obiektu JSON w parametrach get/query? – Nitin

Powiązane problemy