通过POST或GET发送大量数据

时间:2010-09-15 14:04:11

标签: php javascript ajax post get

我正在尝试从html中的文本字段发送XML文件,通过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); }
    });
});

现在,只要我不发送多行代码,它就可以正常工作。但是,当我粘贴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>

我做错了什么?

由于

6 个答案:

答案 0 :(得分:5)

更改

method: "POST"

type: "POST"

可能会有所作为。

答案 1 :(得分:4)

BenSho是正确的,这个论点被称为type。另外:

$("#textfield").text()

我猜这是<textarea>。您不应该使用text()html()来阅读输入字段中的内容,它不会按您的想法执行。使用val()

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

不要使用escape()。它是一个怪异的JavaScript特定函数,看起来像URL编码但不是。如果您将其用于URL编码,则会损坏加号和所有非ASCII字符。

网址编码的正确JavaScript函数是encodeURIComponent()。但是,既然你正在使用jQuery,那么通过传递一个对象来让它为你编写URL代码要好得多:

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

最后:

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

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

答案 2 :(得分:1)

大多数浏览器的网址实际最多为2,083个字符; POST请求没有限制。 GET请求将传递URL中的参数,而帖子则不传递。这一切都取决于您实际发送的数量以确定您应该使用的数量,或者您是否正在发送敏感数据(使用POST)。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

优化你的php.ini

    你可能需要设置
  • post_max_size 你的memory_limit到更高的价值..
  • 取决于你的内存使用情况 脚本也
  • max_execution_time可能是 问题

答案 5 :(得分:0)

试试这个:

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