Php 通过POST或GET发送大量数据

Php 通过POST或GET发送大量数据,php,javascript,ajax,post,get,Php,Javascript,Ajax,Post,Get,我试图通过ajax将html中的文本字段中的XML文件发送到PHP文件。这是万能的PHP文件: <?php $data = urldecode($_POST["xml"]); echo $data; ?> 现在,只要我发送的代码不超过几行,它就会正常工作。然而,当我粘贴一个60行的XML文件时,validate.php返回 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html>&

我试图通过ajax将html中的文本字段中的XML文件发送到PHP文件。这是万能的PHP文件:

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

    echo $data;
?>
现在,只要我发送的代码不超过几行,它就会正常工作。然而,当我粘贴一个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>

403禁止
被禁止的
您没有访问/xml\u stylest/form/validate.php的权限
在这个服务器上

此外,未找到404 尝试使用ErrorDocument处理请求时遇到错误


位于dahwan.info端口80的Apache mod_fcgid/2.3.5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635服务器
我做错了什么


谢谢

在ajax调用上设置数据选项意味着jquery将在GET请求中将这些添加到查询字符串中。大多数浏览器对get请求的长度都有限制。如果您的xml数据太大,您应该切换到POST。

大多数浏览器的url中实际最多有2083个字符;POST请求没有限制。GET请求将传递url中的参数,而post则不会。这完全取决于您实际发送的数据量,以确定您应该使用哪些数据,或者是否发送敏感数据(使用POST)。

优化您的php.ini

  • post_max_尺寸可能需要设置 您的内存限制为更高的值
  • 取决于计算机的内存使用情况
    脚本也
  • 最大执行时间可能是 问题
改变

method: "POST"

这可能会奏效。

试试这个:

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

BenSho是正确的,参数名为
type
。此外:

$("#textfield").text()
我猜这是一个
。您不应该使用
text()
html()
来读取输入字段中的内容,它不会按照您的想法执行。使用
val()

永远不要使用
escape()
。这是一个古怪的JavaScript特定函数,看起来像URL编码,但实际上不是。如果将其用于URL编码,将损坏加号和所有非ASCII字符

URL编码的正确JavaScript函数是
encodeURIComponent()
。但是,由于您使用的是jQuery,最好让它通过传入一个对象来为您计算URL编码:

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

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

您不必(也不应该)手动对URL进行解码。PHP URL将请求正文中的参数解码为原始字符串。

什么是大量数据?大多数服务器都有可接受的最大允许数据输入。在使用Google进行搜索之前,或者在此处发布问题之前,请始终检查Apache
错误日志。你的错误日志怎么说?浏览器对GET的限制通常是4K左右,也许现在仍然如此。当我发现这一点时,我停止使用GET作为任何重量级游戏。你比我快!我一直认为“类型”应该是“方法”…这是有道理的
var data = escape($("#textfield").text());
data: {xml: $("#textfield").text()},
$data = urldecode($_POST["xml"]);