Как с помощью JSON передать серверу словарь с данными?
Привет!
Есть код: $.ajax({ type: "GET", dataType: 'jsonp', data: 'id = 5', url: 'http://localhost/jsonp/', success: function (data) { alert(data); }, }); В этом варианте все просто. Отдаем серверу &id=5 А что если я хочу передать в "data:" словарь? Как его присвоить переменной? Что то типа: $.ajax({ type: "GET", dataType: 'jsonp', data: "id = {'key1':'value1','key2':'value2'}", url: 'http://localhost/jsonp/', success: function (data) { alert(data); }, }); Этот вариант не работает. А мне необходимо на серверной стороне взять переменную $_GET['id'] которая будет содержать этот словарь! Что можно здесь сделать? |
$.ajax({ type: "GET", dataType: 'jsonp', data: {id:{"key1":'value1',"key2":'value2'}}, url: 'http://localhost/jsonp/', success: function (data) { alert(data); }, }); |
Цитата:
"NetworkError: 500 INTERNAL SERVER ERROR - http://localhost/jsonp/?callback=jsonp1313402876472&id%5Bkey1%5D=value1&i d%5Bkey2%5D=value2" |
А это:
Цитата:
|
Да, исправил уже.
Я все пытался взять переменную $_GET['id'] из предыдущего примера... А как теперь взять этот словарь из $_GET на серверной стороне? Имени у него то нет! |
$_SERVER['QUERY_STRING']
Или, как вариант: $.ajax({ type: "GET", data: { "id" : JSON.stringify({"key1" : "value1", "key2" : "value2'}) }, url: 'http://localhost/jsonp/', success: function (data) { alert(data); }, }); И на сервере что-то в духе json_decode($_GET['id']) |
Спасибо!
Переменную в этом случае можно поймать как: $_GET['id[key1]'] или $_GET['id[key2]'] может еще кому будет полезно. Есть еще вопрос. Так как в JSOP для отправки данных на сервер используется метод GET, то разве он не ограничен в 255 символов? Пробовал отправлять больше, все работает! Нашел еще по этому вопросу: Причиной тому было непонятно откуда взявшееся убеждение в том, что максимальная длина URL, регламентированная стандартом HTTP, составляет 256 символов. В действительности это далеко не так (ложное воспоминание о числе 256 скорее всего было порождено SQL-типом VARCHAR или чем-то подробным). HTTP формально не лимитирует длину URL, но ограничение на нее накладывают реализации этого протокола. А как в данный момент с этим обстоят дела? |
Цитата:
$_GET['id']['key1'] Цитата:
|
Кажется меня обманули...
Маны которые я читал про JSONP говорили, что в связи с особенностями вызова через <script src="...."> данные могут передаваться только методом GET. Попробовал через POST, прекрасно работает... |
Цитата:
Цитата:
|
Цитата:
$.ajax({ type: 'POST', dataType: 'jsonp', data: { 'id=5' }, url: 'http://localhost/jsonp/', success: function (data) { alert(data.man1); } }); Все работает. Хотя почти во всех манах читал, что JSONP не работает с POST. |
А откуда вы знаете, что этот код делает внутри jQuery? Тут два варианта: либо он отправляет POST, но не JSONP, либо он отправляет JSONP, но не POST.
|
Цитата:
Даже где то читал, что если указан метод POST для jsonp, то jQuery автоматически переделывает его в GET. Сейчас гуглю на эту тему... [Добавлено] > From: Gregory Foster > I am attempting to POST some JSON data across domains via > jQuery's low- level .ajax() call; since it is cross-domain, I > use the JSONP dataType. That's your problem right there: You can't do that. Cross-domain JSONP isn't AJAX at all. It doesn't use XMLHttpRequest. It's nothing more than a dynamic script element that loads JavaScript code. You can't do a POST with a dynamic script element. Where would you put the POST data? I don't know what the $.ajax code is trying to do - maybe it should fail in a more informative way. It will fail one way or another regardless. -Mike и еще лог FireBug моего запроса: Host localhost User-Agent Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0 Accept text/javascript, application/javascript, */* Accept-Language ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding gzip, deflate Accept-Charset windows-1251,utf-8;q=0.7,*;q=0.7 Connection keep-alive Content-Type application/x-www-form-urlencoded; charset=UTF-8 X-Requested-With XMLHttpRequest - Это, если я не ошибаюсь GET! Referer http://localhost/ Content-Length 80 Вроде как то так. Не работает jsonp с методом POST! |
Цитата:
|
JSONP хорош при обращении к серверам отличным от сервера с которого была загруженна страница. И на сторонний сервер браузер может послать только GET-запрос (политика безопасности). Подчеркну, важная особенность JSONP, это запросы к чужим серверам.
Если же работа происходит только с одним сервером то посылайте и получайте данные так как Вам будет удобно. Нужно отправить большой текстовый кусок ? Отправляете POST-запросом. Хотите в ответ получить JSON, JSONP или XML? Используйте их. |
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 10:28. |