【问题标题】:How to use the response of Ajax Post如何使用 Ajax Post 的响应
【发布时间】:2014-01-20 11:53:58
【问题描述】:

我发出一个 ajax POST 请求以将 JSON 数据发布到服务器,我得到一个简单的文本响应。我可以看到一切正常,因为它显示在浏览器的调试器中。但是,我不能使用它。

    callajax1(Callback);


    function callajax1(callbackfn) {   
    $.ajax({
        type: "POST",
        url: myUrl,
        data: JSON.stringify({ Data: data }),
        contentType: "text/plain; charset=utf-8",
        dataType: "json",
        success: function (data2) {
            callbackfn(data2);
        },
        failure: function (errMsg) {

        }
    });
    return false;
}


function Callback(data) {
    alert(data);
}

没有显示警报。

【问题讨论】:

  • 你怎么称呼“callajax1”?
  • callajax1(Callback);
  • 一些控制台错误?在 $.Ajax() 中使用 error 而不是 failure... 查看控制台中的代码响应。
  • “成功”真的被解雇了吗?
  • 你在定义它之前调用callajax1(Callback);...你准备好了吗?在其他情况下,您在定义后放置callajax1(Callback);

标签: javascript jquery ajax post


【解决方案1】:

您说您收到的是“简单文本响应”,但您的 JavaScript (dataType: "json") 表示忽略响应的内容类型并将其解析为 JSON。

也许(因为您发送 JSON 并声称它是纯文本)您混淆了 dataType(覆盖服务器返回的内容类型)和 contentType(描述您发送的数据)。

如果响应是“简单文本”而不​​是 JSON,那么您不能将其解析为 JSON。返回 JSON 或使用 dataType: 'text'

【讨论】:

  • 感谢您明确contentTypedataType 之间的区别。这解决了问题。 dataType:'text' 有效,dataType:'text/plain; charset=utf-8' 无效。为什么会这样?
  • 使用 dataType 定义来自服务器的预期响应。由于您的服务器响应是纯文本,我假设您的“成功”回调从未被调用,而是失败。请参阅api.jquery.com/jquery.ajax 了解更多信息
  • @enb081 — 因为 jQuery 的作者是这样写的。
【解决方案2】:
  • 如果ajax的结果是文本,数据类型应该是文本
  • 如果ajax的结果是html,datatype应该是html
  • 如果ajax的结果是json,datatype应该是json
  • 如果ajax的结果是xml,数据类型应该是xml

dataType 告诉 jQuery 以给定的 dataType 解析结果,默认为 'text',尽管 jQuery 足够智能,可以检测需要进行哪种转换。

【讨论】:

  • 你说的是哪个“它”?
  • 对不起,我顺其自然
  • jQuery 的默认值是 not 文本,它是“Intelligent Guess”,意思是“从响应的 MIME 类型(Content-Type)推断它”。跨度>
  • 是的,如果没有定义,那么 jQuery 使用来自 MIME 类型响应的智能猜测,如果还有其他内容,它将显示为简单的纯文本,所以我可以说如果智能无法查找数据类型,ajax默认将结果为纯文本。
【解决方案3】:

你可以在这里看到答案:

http://jsfiddle.net/justtal/x9re9/

function callajax1(callbackfn) {

    $.ajax({
        type: "GET",
        url: 'https://gdata.youtube.com/feeds/api/videos',
        /*data: JSON.stringify({ Data: data }),*/
        /*contentType: "text/plain; charset=utf-8",*/
        /*dataType: "json",*/
        success: function (data2) {
            callbackfn(data2);
        },
        failure: function (errMsg) {
            callbackfn(errMsg);
        }
    });
    return false;
}


var Callback = function (data) {
    alert(data);
}

callajax1(Callback);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 2016-09-19
    • 2013-05-03
    • 1970-01-01
    相关资源
    最近更新 更多