daredevil26
1.10.2013 - 13:12
При передаче POST запроса PHP скрипту возникает вот такая ошибка:
Цитата |
Request-URI Too Large The requested URL's length exceeds the capacity limit for this server. Apache/2.2.22 (Win32) mod_ssl/2.2.22 OpenSSL/1.0.1c PHP/5.3.13 Server at localhost Port 80
|
Проблема заключается в слишком большом URL'е
Вот код отправки запроса jquery:
$("button#submit").click(function() {
var title = $("input#title").val();
var cat_id = $("option:selected").val();
var content = $("textarea#editor1").val();
var tags = $("input#tags").val();
var id_author = $("input#id_author").val();
$.ajax({
type: "POST",
url: "modules/add_mat/add_mat.php",
data: "title="+title+"&cat_id="+cat_id+"&content="+content+"& ;tags="+tags+"&id_author=".id_author,
success: function(msg){
alert( "Материал добавлен" );
}
});
данных в переменной content очень много (по большей части потому что они добавляются через wysiwyg редактор)
какие есть способы решения данной проблемы?
HErATuB
1.10.2013 - 13:30
Хмм, такая ошибка возникает если в url используются русские буквы или при отправки GET строка не может поместить весь запрос.
daredevil26
1.10.2013 - 13:36
Цитата (HErATuB @ 1.10.2013 - 13:30) |
Хмм, такая ошибка возникает если в url используются русские буквы или при отправки GET строка не может поместить весь запрос. |
Русские буквы кодируются и отправляются на сервер (сохраняются в mysql и выводятся нормально), а вот с длинной GET - запроса уже теплее, возможно нужно из переменной content сгенерировать xml файл и отправить его на сервер, но как сделать это?
Судя по ошибке вы все таки отправляете данные get'ом.
З.Ы. аяксом форму удобно отправлять так:
$.ajax({
url: "script.php",
type: "post",
data: $("#myForm").serialize()
})
daredevil26
1.10.2013 - 14:04
Цитата (kaww @ 1.10.2013 - 13:48) |
Судя по ошибке вы все таки отправляете данные get'ом. З.Ы. аяксом форму удобно отправлять так:
$.ajax({ url: "script.php", type: "post", data: $("#myForm").serialize() }) |
Все равно вылетает эта ошибка, пробовал код
$.ajax({
url: "modules/add_mat/add_mat.php",
type: "post",
data: $("#myForm").serialize(),
success: function(data, textstatus) {
$("textarea").html(data);
}
});
HErATuB
1.10.2013 - 14:31
Попробуй через post
$.post("modules/add_mat/add_mat.php", { title: title, cat_id:cat_id, content:content,tags:tags, id_author:id_author},
function(data){
alert( "Материал добавлен" );
});
daredevil26
1.10.2013 - 14:50
Цитата (HErATuB @ 1.10.2013 - 14:31) |
Попробуй через post
$.post("modules/add_mat/add_mat.php", { title: title, cat_id:cat_id, content:content,tags:tags, id_author:id_author}, function(data){ alert( "Материал добавлен" ); }); |
не получается, все равно формируется URL, придется отправлять данные стандартным методом (отбрасывая jquery) и использовать редирект, допустим на success.php, была идея разбивать content допустим по 2000 символов и кусками отправлять на сервер... вывод - геморройная идея.
З.Ы.
WYSIWYG редактор который использую называется ckeditor (так на будущее, возможно кто-то столкнется с похожей проблемой)
killer8080
1.10.2013 - 15:21
Цитата (daredevil26 @ 1.10.2013 - 12:12) |
При передаче POST запроса PHP скрипту возникает вот такая ошибка: Цитата Request-URI Too LargeThe requested URL's length exceeds the capacity limit for this server.Apache/2.2.22 (Win32) mod_ssl/2.2.22 OpenSSL/1.0.1c PHP/5.3.13 Server at localhost Port 80 |
нужно блокировать дефолтовое действие кнопки, у вас после отправки аякса происходит штатный сабмит формы, отсюда и ошибки характерные для GET
daredevil26
3.10.2013 - 10:32
Вопрос решен, в силу собственной глупости в теге <form> был не обьявлен метод. В случае если метод не обьявлен, то по умолчанию стоит GET.
Цитата |
нужно блокировать дефолтовое действие кнопки, у вас после отправки аякса происходит штатный сабмит формы, отсюда и ошибки характерные для GET
|
Кнопка стоит <button class="btn">Сохранить</button> (дефолтового действия нет)
killer8080
3.10.2013 - 14:27
Цитата (daredevil26 @ 3.10.2013 - 09:32) |
Вопрос решен |
сомневаюсь
Цитата (daredevil26 @ 3.10.2013 - 09:32) |
в силу собственной глупости в теге <form> был не обьявлен метод. В случае если метод не обьявлен, то по умолчанию стоит GET. |
Все так, но это актуально при штатном сабмите, ты же зачем то используешь аякс?
Цитата (daredevil26 @ 3.10.2013 - 09:32) |
Кнопка стоит <button class="btn">Сохранить</button> (дефолтового действия нет) |
Ошибаешься, если кнопка находится внутри формы, по дефолту она работает как сабмит, что собственно и происходит, вначале шлется аякс запрос, и тут же не дожидаясь ответа, форма отправляется повторно, с перезагрузкой страницы. Потому ты и видел ошибку
Цитата |
Request-URI Too Large The requested URL's length exceeds the capacity limit for this server. Apache/2.2.22 (Win32) mod_ssl/2.2.22 OpenSSL/1.0.1c PHP/5.3.13 Server at localhost Port 80 |
она прилетала не от аякса
Так что определись, что тебе нужно?
HErATuB
4.10.2013 - 09:25
добавь в тег form: onsubmit="return false;"
Invis1ble
4.10.2013 - 18:54
Есть мнение, что ТС либо не понимает сути ajax-запросов, либо он читает книгу посты killer'а и видит фигу
Цитата |
добавь в тег form: onsubmit="return false;" |
HErATuB
7.10.2013 - 09:13
Цитата (Invis1ble @ 4.10.2013 - 14:54) |
плохой совет, говнокод |
для ТС самое то. Ибо намек, форму нельзя отправлять.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.