JQuery Post: запрос Uri слишком долго - PullRequest
1 голос
/ 13 марта 2011

Итак, вот интересная проблема. Я отправляю сообщение в веб-службу и получаю слишком длинный URI запроса. jQuery, кажется, добавляет мои данные к URL:

// this is dynamically generated, and can get very long
var s = 'q=string1&q=string2';

$.ajax({
  type: 'POST',
  url: 'https://www.googleapis.com/language/translate/v2?',
  data: s,
  dataType: 'jsonp'
});

Я тоже пробовал:

data: {data: s}

То же самое.

Сложность в том, что мне нужно перевести несколько предметов. Google требует, чтобы вы передавали переменную 'q' несколько раз. Не массив, но один и тот же параметр несколько раз. Который кажется странным. Это исключает использование объекта json, потому что вы не можете использовать один и тот же ключ дважды. Отсюда причина, по которой я должен передать строку.

Есть идеи, как мне это сделать и получить данные в теле запроса вместо URI?

Спасибо.

Ответы [ 3 ]

8 голосов
/ 15 марта 2011

Нет такой вещи, как запрос JSONP POST. JSONP предназначен для передачи параметров в атрибуте src тега script, и скрипт всегда загружается с помощью GET. Если вы установите тип данных вызова $.ajax на jsonp, jQuery будет игнорировать настройку type и использовать GET (где применяются ограничения длины URI). Отправка междоменных запросов POST с помощью AJAX возможна , но довольно сложна и требует взаимодействия целевого сервера. В противном случае вам нужно использовать какой-нибудь прокси-сервер.

0 голосов
/ 14 марта 2011

Ответ в том, что вы не можете отправлять сообщения на удаленные URI. Видимо, это не разрешено через JQuery. Я должен был отправить на свой собственный сервер, а затем и передать вызов соответственно. jQuery попытается преобразовать запрос в запрос GET, потому что это разрешено.

0 голосов
/ 13 марта 2011

Я заметил, что вы установили: X-HTTP-Method-Override в GET, что может быть вероятной причиной такого поведения.

Что по сути X-HTTP-Method-Override делает, так это говорит Restful клиентам переопределитьфактический метод HTTP и интерпретируйте запрос как значение X-HTTP-Method-Override.

Следовательно, запрос может фактически работать как запрос GET.Попробуйте изменить его на POST и посмотрите, что произойдет.

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