2010-09-15 3 views
4

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

<?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); } 
    }); 
}); 

Теперь, до тех пор, пока я не послал больше, чем несколько строк кода, он работает как это должно. Однако, когда я вставляю 60-строчный XML-файл, 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> 

Что я делаю неправильно?

Благодаря

+1

Что такое много данных? Большинство серверов имеют максимально допустимый ввод данных, который принимается. –

+0

* Всегда * проверяйте свой Apache 'error_log' перед тем, как выполнять поиск в Google, или даже разместите здесь вопрос. Что говорит ваш error_log? – Lekensteyn

ответ

5

Изменение

method: "POST" 

в

type: "POST" 

, что может сделать трюк.

+0

Я избил меня! Я всегда, что «типа» _should_ быть «методом» ... это будет иметь смысл –

+0

Да, спасибо! :) – Hubro

0

Установка опции данных на Ajax вызовов означает, что JQuery будет добавить их в строку запроса в запросе GET. Большинство браузеров имеют ограничение на длину запроса на получение. Если ваши xml-данные слишком велики, вы должны переключиться на POST.

+0

Ограничение на GET, наложенное браузерами, обычно было около 4K, возможно, оно все еще есть. Когда я обнаружил это, я прекратил использовать GET для чего-то тяжелого. –

1

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

0

оптимизируют php.ini

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

попробовать это:

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

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-декодирует параметры в тело запроса в необработанные строки для вас.

Смежные вопросы