Jquery ajax contentType让我困惑

时间:2013-01-10 02:44:06

标签: php jquery asp.net ajax

我正在使用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"];

但结果snull

逻辑上,设置contentType="application/json"和发布json数据是完美的。但这是错误的。

我也试过php文件中的代码:

echo $_POST["data"];

PHP说$_POST["data"] doesn't exist

所以我尝试删除代码 - contentType: "application/json"

现在,一切都很好。

但它让我很困惑。  当我们发布真正的json数据时,为什么不需要将contentType设置为json?

2 个答案:

答案 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']);