我正在通过ajax将数据发送到我的服务器(PHP),我将调用设置为POST请求,但不知何故它不能以这种方式工作并作为GET请求,这里是代码:< / p>
$.ajax({
type: 'POST',
data: {
user: user
},
url: url,
crossDomain: true,
contentType: "application/json; charset=utf-8",
dataType: 'jsonp',
success: function (data) {
alert(data);
},
error: function (error) {
alert(error)
}
});
PHP:
<?php
$user = $_POST["user"];
echo $user;
?>
这不起作用,但如果我将$ _POST更改为$ _GET,则效果很好。
我做错了什么,服务器根据我的意愿解释GET而不是POST,因为我在ajax调用中设置它?
答案 0 :(得分:1)
你有几个问题。
这一行:
dataType: 'jsonp',
...导致您的请求发出JSONP请求。通过向文档添加<script>
元素来发送数据,并且响应必须编码为JSONP。您的响应未编码为JSONP,它是纯文本响应。
删除该行。
请注意,由于您使用的是PHP,因此默认情况下响应的内容类型为text/html
。由于您直接从脚本中回显用户输入,因此您很容易受到XSS attack的攻击。将输出编码为HTML(带htmlspecialchars
)或说明您要发送纯文本:
header("Content-Type: text/plain");
这一行:
contentType : "application/json; charset=utf-8",
...使您的HTTP请求声明您正在发送JSON但是:
application/x-www-form-urlencoded
数据$_POST
)删除该行。您将使用正确的内容类型(因为默认值是正确的),PHP将填充$_POST
(因为它会自动为application/x-www-form-urlencoded
数据执行此操作)。
(当你使用GET请求时它会起作用,因为数据在查询字符串中被编码,而内容类型标题被忽略,因为没有内容来描述类型)。