#php #ajax #json #continuous-integration
#php #ajax #json #непрерывная интеграция
Вопрос:
я пытаюсь передать строку json от клиента к серверу, у меня есть массив, который является JSON.stringify-ed, а затем отправляется на сервер в URL, который выглядит следующим образом:
http://localhost/sublimation/index.php/index/imgCreate / {«name»:»pillow.png»,»element»:»basketball-2.png»,»elAngle»:0,»elTop»:78,»elLeft»:117,»elHeight»:90,»elWidth»:90,»captionA»:»»,»capAR»:0,»capAG»:200,»capAB»:200,»capATop»:112,»capALeft»:141,»capASize»:12,»captionB»:»»,»capBR»:0,»capBG»:200,»capBB»:200,»capBTop»:112,»capBLeft»:141,»capBSize»:12,»photo»:»#»,»picTop»:0,»picLeft»:0,»picHeight»:20,»picWidth»:110,»picAngle»:0}
теперь это возвращает ошибку 400 сообщений:
HTTP Ошибка 400. URL-адрес запроса недействителен.
единственный способ, которым мне удалось заставить ее работать, — это сократить строку, все остальное не удалось. похоже, json не самая популярная вещь, потому что мне не удалось найти ничего даже отдаленно полезного в Google.
у кого-нибудь есть идея?
tnx, Ido
РЕДАКТИРОВАТЬ !!; Я отредактировал код в соответствии с рекомендациями, это то, что я получаю сейчас: (все та же ошибка)
Комментарии:
1. JSON очень популярен, поэтому постарайтесь избавиться от этого заблуждения как можно скорее.
2. Когда мы сказали, что POST — это правильный путь, мы имели в виду, что вы отправляете сообщение в localhost/sublimation/index.php и передайте все параметры в теле сообщения, а не URL. Этот URL имеет длину 720 символов, что не так уж и много (отлично работает с моим локальным Apache), но, возможно, уже слишком много для некоторых веб-серверов. Смысл использования POST в том, чтобы сохранить URL коротким.
3. это то, что я делаю. теперь мой код выглядит так: var data_string = JSON.stringify(данные); url = «index.php /index/imgCreate /» data_string; url = encodeURIComponent (url); когда данные представляют собой строку, и она по-прежнему показывает неверный запрос. код, который я отредактировал в нижней части моего вопроса, взят с консоли, а не с URL
Ответ №1:
Это, безусловно, недопустимый URL, даже если бы он был короче. Символы типа «, {, }, # и, возможно: запрещены в сегменте пути URL. Вы должны разделить их по URI (» становится » и так далее). Возможно, ваш браузер сделал это автоматически за вас, и результирующий URL достиг предела длины веб-сервера, который затем вернул 400.
Использование POST-запросов должно решить проблему. Вы можете перенести туда гораздо больше данных, чем в URL.
Комментарии:
1. POST — это определенно тот способ, которым вы хотите передавать json.
2. url, который вы видите, после того, как я изменил его обратно из » и т.д. Чтобы сделать его более читаемым, я постараюсь опубликовать данные, спасибо
Ответ №2:
Вам нужно закодировать ваш json, потому что у вас есть некоторые специальные символы в json, которые взаимодействуют, если они находятся в url. Это может помочь или дать подсказку.
Проблема также может быть с #
.
Ответ №3:
Похоже, что вы отправляете свой JSON с помощью GET вместо POST. Слишком длинный GET вызовет ошибки и подвержен проблемам. Кодирование вашей строки JSON также поможет.