2010-09-15 75 views
4

我想从我的html中的文本字段通过ajax发送XML文件到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

什么是大量的数据?大多数服务器都有可接受的最大允许数据输入。 – 2010-09-15 14:05:52

+0

*总是*在使用Google搜索之前检查您的Apache'error_log',甚至在此发布问题。你的error_log说什么? – Lekensteyn 2010-09-15 14:25:08

回答

5

更改

method: "POST" 

type: "POST" 

可能做的伎俩。

+0

你打我吧!我总是那种“类型”_应该是“方法”......它会有道理 – 2010-09-15 14:28:08

+0

是的,谢谢! :) – Hubro 2010-09-15 14:53:01

0

设置上的Ajax调用数据选项意味着jQuery将GET请求中添加这些到查询字符串。大多数浏览器对获取请求的长度有限制。如果你的XML数据太大,你应该切换到POST。

+0

浏览器对GET的限制通常是4K左右,也许它仍然是。当我发现这些时,我停止使用GET来做任何重量级的事情。 – 2010-09-15 14:17:50

1

大多数浏览器在url中实际最多有2,083个字符; 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字符。

URL编码的正确JavaScript函数是encodeURIComponent()。但是,因为你使用jQuery,更好让它工作了网址编码为您传递一个对象:

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

最后:

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

你没有(和不应该)手动URL解码任何东西。 PHP URL - 将请求正文中的参数解码为原始字符串。