【问题标题】:Jquery ajax contentType confused meJquery ajax contentType 让我很困惑
【发布时间】:2013-01-10 10:54:01
【问题描述】:

我正在使用 jquery ajax 函数。 我在将 JSON 数据发布到服务器时发现了一个问题。

post 数据的类型是 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?

【问题讨论】:

  • 您不发布 json,您发布表单数据。数据会在提交前被jquery编码
  • 您可以将选项processData 设置为false。然后数据不会被转换为查询字符串。查询字符串的默认 contentType 为 application/x-www-form-urlencoded
  • @redreggae:不,那行不通
  • @roast_soul 如果您这样做,那么您将无法使用POST 数组获取数据。看看拉贾特的回答。但是你为什么要这样做呢?
  • 所以最好不要添加contentType 选项,然后它应该可以工作..

标签: php jquery asp.net ajax


【解决方案1】:

你不需要做contentType: "application/json",当你不指定内容类型时,它会将要发送的数据转换为http参数,来自json..可通过$_GET或$_POST参数访问..

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

<?php
$data = @file_get_contents('php://input');
print_r(json_decode($data));
?>

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • contentType 定义 jQuery 将发送到服务器的数据类型。响应的预期类型将由dataType 定义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    相关资源
    最近更新 更多