我正在尝试从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>
我做错了什么?
由于
答案 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
答案 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); }
});
});