1

我正在使用 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?

4

2 回答 2

2

您不需要这样做contentType: "application/json",当您不指定内容类型时,它会将要在 http 参数中发送的数据从 json 转换为可通过 $_GET 或 $_POST 参数访问的数据。

但是如果你只想发送 json 数据..你可以在服务器端尝试这个代码来获取数据:

<?php
$data = @file_get_contents('php://input');
print_r(json_decode($data));
?>
于 2013-01-10T02:54:01.377 回答
0

您没有发回 JSON 数据。当 ajax 内容类型设置为接受 JSON 时,jQuery 认为这是一个错误,但会返回格式错误的 JSON。

echo $_POST['data']可能会抛出异常“可捕获的致命错误:stdClass 类的对象无法转换为字符串”——因此实际上会被打印出来。那不是有效的 JSON。

你可能想要做的是echo json_encode($_POST['data']);

于 2013-01-10T02:52:50.537 回答