@РЕШЕНО
Как объяснил Джеймс М. Лей, я должен изменить свой тип контента с application/x-www-form-urlencoded
на application/json
.
это подразумевает ошибку, потому что кажется, что только типы UrlEnconded генерируют массивы POST на стороне сервера (по крайней мере, в PHP). Поэтому мне пришлось изменить способ получения/обработки запроса в моем серверном скрипте.
$json = file_get_contents('php://input'); //yes. php://input
if($json) $params = json_decode($json,true);
else $params = $_POST;
Мне также пришлось внести несколько изменений в код Javascript, чтобы проверить тип содержимого и сгенерировать разные строки. Если это JSON, я просто использую JSON.stringify
//string to use in the 'send' method
this.getParametersString = function(){
if(this.contentType == 'application/json'){
return JSON.stringify(this.parameters);
}else{}
}
у меня вопрос
Я создаю функцию, которая получает параметры, чтобы написать список параметров и отправить его POST
Проблема в том, что мы не можем отправлять специальные символы, такие как +
Поэтому я попытался использовать функцию encodeURIComponent
, чтобы закодировать их в строку, удобную для URI.
Возникает еще одна проблема: если полученный параметр является объектом, я перебираю атрибуты, проверяя, является ли это другим объектом или строкой, если это объект, повторяю цикл снова, иначе кодирую его.
Но он возвращает объект закодированных строк. Я должен сделать объект строкой, чтобы отправить его, и для этой цели я использую JSON.stringify
. Он декодирует закодированную строку. Таким образом, %2B
снова становится +
и не отправляется на сервер через POST.
с другой стороны, если я сначала использую stringify
, а encodeURIComponent
он генерирует такие знаки, как "и {}, которые не следует кодировать, а строка не является хорошо написанным JSON
Как ты это делаешь? Это способ без использования jQuery? Должен ли я создавать свою собственную функцию stringify?!
stringify
в JS и парсить на сервере. - person Rudie   schedule 24.08.2014encodeURIComponent
вообще. JSON, естественно, может обрабатывать специальные символы, а JSON.stringify() автоматически позаботится о большинстве крайних случаев. Причина, по которой вы хотели быencode
отправить POST, заключается в том, что сервер ожидаетapplication/x-www-form-urlencoded
. Поскольку ваш сервер ожидает JSON, вы можете просто отправить обычный JSON вверх по линии. - person James M. Lay   schedule 24.08.2014application/x-www-form-urlencoded
это то, что у меня есть в моемContent-type
. надо ли менять!? я попытаюсь - person Victor Ferreira   schedule 24.08.2014application/json
, но вы также можете использоватьtext/plain
. - person James M. Lay   schedule 24.08.2014application/x-www-form-urlencoded
, он будет работать нормально (я получаю строку JSON). есть какое-нибудь представление о том, что происходит? - person Victor Ferreira   schedule 24.08.2014