我正在使用jquery ajax函数。 当我将JSON数据发布到服务器时,我注意到了一个问题。
发布数据的类型是JSON。所以我添加了代码以指定我发送的是JSON。
contentType: "application/json".
我在下面写了代码:
var data = {"data": "mytestdata" };
var option = {
url: 'Handler1.ashx',
type: 'POST',
dataType: 'html',
success: function (result) {
alert(result);
},
data: data,
contentType: "application/json"
};
$.ajax(option);
在服务器端,我使用下面的代码:
string s = context.Request["data"];
但结果s
为null
。
逻辑上,设置contentType="application/json"
和发布json数据是完美的。但这是错误的。
我也试过php文件中的代码:
echo $_POST["data"];
PHP说$_POST["data"] doesn't exist
。
所以我尝试删除代码 - contentType: "application/json"
。
现在,一切都很好。
但它让我很困惑。 当我们发布真正的json数据时,为什么不需要将contentType设置为json?
答案 0 :(得分:2)
您不需要执行contentType: "application/json"
,当您没有指定内容类型时,它会将数据转换为http参数,来自json ...,可通过$访问_GET,或$ _POST params ..
但是如果你只想发送json数据..你可以在服务器端尝试这个代码来获取数据:
<?php
$data = @file_get_contents('php://input');
print_r(json_decode($data));
?>
答案 1 :(得分:0)
您没有发回JSON数据。当ajax内容类型设置为接受JSON时,jQuery认为这是一个错误,但是发送了错误的JSON。
echo $_POST['data']
可能会抛出异常“可捕获的致命错误:类stdClass的对象无法转换为字符串” - 因此实际打印出来。这不是有效的JSON。
您可能想要做的是echo json_encode($_POST['data']);