Отправка большого количества данных через POST или GET - PullRequest
4 голосов
/ 15 сентября 2010

Я пытаюсь отправить файл XML из текстового поля в моем html через ajax в файл PHP.Это всемогущий PHP-файл:

<?php 
    $data = urldecode($_POST["xml"]);

    echo $data;
?>

Данные отправляются в этот файл следующим образом:

$("#btn_save").click(function() {
    var data = escape($("#textfield").text());
    alert(data);
    $.ajax({
        url:        "validate.php",
        method:     "POST",
        data:       "xml=" + data,
        complete:   function(e) { alert(e.responseText); }
    });
});

Теперь, пока я не отправил более нескольких строккод, он работает как надо.Однако, когда я вставляю XML-файл из 60 строк, validate.php возвращает

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /xml_stylist/form/validate.php
on this server.</p>
<p>Additionally, a 404 Not Found
error was encountered while trying to use an ErrorDocument to handle the request.</p>
<hr>
<address>Apache mod_fcgid/2.3.5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 Server at dahwan.info Port 80</address>
</body></html>

Что я делаю не так?

Спасибо

Ответы [ 6 ]

5 голосов
/ 15 сентября 2010

Измените

method: "POST"

на

type: "POST"

, что может помочь.

4 голосов
/ 15 сентября 2010

BenSho верен, аргумент называется type.Кроме того:

$("#textfield").text()

Я предполагаю, что это <textarea>.Вы не должны использовать text() или html() для чтения содержимого из поля ввода, оно не выполняет то, что вы думаете.Используйте val().

var data = escape($("#textfield").text());

Никогда не используйте escape().Это странная JavaScript-специфическая функция, которая выглядит как URL-кодировка, но не похожа.Если вы используете его для кодирования URL, вы испортите знаки плюс и все не-ASCII символы.

Правильная функция JavaScript для кодирования URL - encodeURIComponent().Однако, так как вы используете jQuery, гораздо лучше позволить ему отработать URL-кодировку для вас, передав объект в:

data: {xml: $("#textfield").text()},

Наконец:

$data = urldecode($_POST["xml"]);

Вы недолжен (и не должен) URL-декодировать что-либо вручную.PHP URL-декодирует параметры в теле запроса в необработанные строки.

1 голос
/ 15 сентября 2010

Большинство браузеров имеют практический максимум 2 083 символов в URL;для POST-запроса нет ограничений.Запрос GET передаст параметры в URL, а сообщение - нет.Все зависит от того, сколько вы на самом деле отправляете, чтобы определить, какой из них следует использовать, или если вы отправляете конфиденциальные данные (используйте POST).

0 голосов
/ 15 сентября 2010

попробуйте это:

$("#btn_save").click(function() {
    var data = $("#textfield").text();
    $.ajax({
        url:        "validate.php",
        type:       "POST",
        data:       {"xml": data},
        complete:   function(e) { alert(e.responseText); }
    });
});
0 голосов
/ 15 сентября 2010

Оптимизируйте ваш php.ini

  • post_max_size. Возможно, вам придется установить в качестве значения memory_limit более высокое значение.
  • зависит также от использования памяти вашего
    сценария *
  • max_execution_time может быть проблемой
0 голосов
/ 15 сентября 2010

Установка параметра данных для вызовов ajax означает, что jquery добавит их в строку запроса в запросе GET. Большинство браузеров имеют ограничение на длину запроса get. Если ваши XML-данные слишком велики, вам следует переключиться на POST.

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