jsfiddle jquery ajax没有按预期返回数据

时间:2013-12-20 15:36:42

标签: javascript jquery ajax jsfiddle jquery-deferred

我正在尝试对jsfiddle进行jquery ajax调用但是遇到了问题:

var ajax1 = function () {
    return $.ajax({
        type: "post",
        url: "/echo/json/",
        data: {
            name: "thomas!"
        },
        dataType: 'json'
    });
};

var res = ajax1();
console.log(res);

将整个延迟对象打印到控制台。它包括responseText,我认为也许是我应该尝试访问的内容,但我未定义。

console.log(res.responseText);
带有HTML的

I tried this once before,一切似乎都有效,但JSON由于某种原因失败了。

2 个答案:

答案 0 :(得分:7)

ajax返回一个promise对象,而不是ajax请求的结果。您需要注册成功回调以获取ajax请求返回的值

应该是

var ajax1 = function () {
    return $.ajax({
        type: "post",
        url: "/echo/json/",
        //also the format for json request is as follows
        data: {
            json: JSON.stringify({
                name: "thomas!"
            })
        },
        dataType: 'json'
    });
};

var res = ajax1();
res.done(function (data) {
    console.log(data)
})

演示:Fiddle

答案 1 :(得分:2)

你是对的,JQuery返回一个Deferred对象实例。

因此,您应该在对象上调用done()来获取数据:

var res = ajax1();
res.done(function(data) { console.log(data); });

$.ajax()返回jqHXR实例(实现延迟模式)。从函数返回此函数时,将返回jqHXR对象。这实现了一个传递回调函数的done()方法。