【问题标题】:What is content-type and datatype in an AJAX request?AJAX 请求中的内容类型和数据类型是什么?
【发布时间】:2013-09-09 15:03:18
【问题描述】:

POST 请求中的内容类型和数据类型是什么?假设我有这个:

$.ajax({
    type : "POST",
    url : /v1/user,
    datatype : "application/json",
    contentType: "text/plain",
    success : function() {

    },
    error : function(error) {

    },

我们发送的是contentType 吗?那么我们在上面的例子中发送的是 JSON,而我们接收的是纯文本?我真的不明白。

【问题讨论】:

    标签: jquery


    【解决方案1】:

    contentType 是您要发送的数据类型,因此application/json; charset=utf-8 是常见的,application/x-www-form-urlencoded; charset=UTF-8 也是默认的。

    dataType 是您期望从服务器返回的内容:jsonhtmltext 等。jQuery 将使用它来确定如何填充成功函数的参数。

    如果您发布类似的内容:

    {"name":"John Doe"}
    

    期待回来:

    {"success":true}
    

    那么你应该有:

    var data = {"name":"John Doe"}
    $.ajax({
        dataType : "json",
        contentType: "application/json; charset=utf-8",
        data : JSON.stringify(data),
        success : function(result) {
            alert(result.success); // result is an object which is created from the returned JSON
        },
    });
    

    如果您期待以下情况:

    <div>SUCCESS!!!</div>
    

    那么你应该这样做:

    var data = {"name":"John Doe"}
    $.ajax({
        dataType : "html",
        contentType: "application/json; charset=utf-8",
        data : JSON.stringify(data),
        success : function(result) {
            jQuery("#someContainer").html(result); // result is the HTML text
        },
    });
    

    还有一个 - 如果你想发帖:

    name=John&age=34
    

    然后不要stringify数据,然后:

    var data = {"name":"John", "age": 34}
    $.ajax({
        dataType : "html",
        contentType: "application/x-www-form-urlencoded; charset=UTF-8", // this is the default value, so it's optional
        data : data,
        success : function(result) {
            jQuery("#someContainer").html(result); // result is the HTML text
        },
    });
    

    【讨论】:

    • 真的谢谢你 :) 这是什么“成功”:真的。它是后端的另一个json文件吗?这种成功是如何取得的?这就是我真正想知道的
    • 这只是一个普通的对象——它是由服务器决定的。 Web 服务器可以发送任何感觉的东西——HTML、文本,或者在这种情况下,是一个 JSON 对象,它具有名称为“success”且值为 true 的单个属性。我猜不出你的 API 框架是什么,但在 ASP.NET MVC 上的 C# 中,它会像 [HttpPost]public JsonResult user(Person postedPerson) { /* Save postedPerson to DB */ return Json(new { success = true }); } 这样简单
    • 注意你应该使用$.ajax({ dataType : "html", ... 而不是$.ajax({ datatype : "html",... 所以在word Type中大写T很重要。检查jQuery API
    • @Jacques 我想他们可以做到requestContentTyperesponseDataType,但实际上,一旦你做过几次,并且你了解了 API,你就不会感到困惑足以让额外的打字变得有价值。
    • @stom 这个问题和我的回答是针对 POST 的,但如果我记得,如果你将一个普通的简单对象作为 GET 上的数据传递,它将把它变成一个带有键的查询字符串-值对。不确定如果您有一个具有嵌套值的复杂对象会发生什么 - 但如果您很好奇,应该不难尝试。不过,在现实生活中我永远不会这样做——无论如何,我很少在 GET 上使用 AJAX。
    【解决方案2】:

    来自 jQuery 文档 - http://api.jquery.com/jQuery.ajax/

    contentType向服务器发送数据时,使用该内容类型。

    dataType 您期望从服务器返回的数据类型。如果没有指定,jQuery 将尝试根据 响应的 MIME 类型

    “text”:纯文本字符串。

    所以你希望 contentType 是 application/json 和 dataType 是 text

    $.ajax({
        type : "POST",
        url : /v1/user,
        dataType : "text",
        contentType: "application/json",
        data : dataAttribute,
        success : function() {
    
        },
        error : function(error) {
    
        }
    });
    

    【讨论】:

    • 非常感谢,这个应用程序在 application/json 中是什么。是路径吗?
    • @user2759697 这只是为 JSON 定义的 MIME 类型的一部分。看到这个问题 - stackoverflow.com/questions/477816/…
    • 这就是我喜欢 SO...获得代表陈述显而易见的...>_
    【解决方案3】:

    http://api.jquery.com/jQuery.ajax/,那里提到了数据类型和内容类型。

    它们都用于对服务器的请求,因此服务器知道要接收/发送什么样的数据。

    【讨论】:

      猜你喜欢
      • 2017-10-19
      • 2015-09-29
      • 1970-01-01
      • 2019-05-03
      • 1970-01-01
      • 2012-12-16
      • 1970-01-01
      • 2016-04-08
      • 2013-02-20
      相关资源
      最近更新 更多