[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Request-URI Too Large
daredevil26
При передаче 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
Хмм, такая ошибка возникает если в url используются русские буквы или при отправки GET строка не может поместить весь запрос.
daredevil26
Цитата (HErATuB @ 1.10.2013 - 13:30)
Хмм, такая ошибка возникает если в url используются русские буквы или при отправки GET строка не может поместить весь запрос.

Русские буквы кодируются и отправляются на сервер (сохраняются в mysql и выводятся нормально), а вот с длинной GET - запроса уже теплее, возможно нужно из переменной content сгенерировать xml файл и отправить его на сервер, но как сделать это?
kaww
Судя по ошибке вы все таки отправляете данные get'ом.
З.Ы. аяксом форму удобно отправлять так:
$.ajax({
url: "script.php",
type: "post",
data: $("#myForm").serialize()
})
daredevil26
Цитата (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
Попробуй через 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
Цитата (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
Цитата (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
Вопрос решен, в силу собственной глупости в теге <form> был не обьявлен метод. В случае если метод не обьявлен, то по умолчанию стоит GET.
Цитата

нужно блокировать дефолтовое действие кнопки, у вас после отправки аякса происходит штатный сабмит формы, отсюда и ошибки характерные для GET

Кнопка стоит <button class="btn">Сохранить</button> (дефолтового действия нет)
killer8080
Цитата (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
она прилетала не от аякса wink.gif
Так что определись, что тебе нужно?
HErATuB
добавь в тег form: onsubmit="return false;"
Invis1ble
Есть мнение, что ТС либо не понимает сути ajax-запросов, либо он читает книгу посты killer'а и видит фигу
Цитата
добавь в тег form: onsubmit="return false;"
HErATuB
Цитата (Invis1ble @ 4.10.2013 - 14:54)
плохой совет, говнокод

для ТС самое то. Ибо намек, форму нельзя отправлять.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.