2013-12-20 20 views
1

我想上的jsfiddle一個jquery Ajax調用,但我有一個問題沒有返回數據:的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); 

I tried this once before HTML和一切似乎工作,但JSON失敗的某些原因。

回答

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

+0

謝謝。無關的問題,但你可能知道。有什麼辦法可以延遲處理嗎?我以爲我曾經能夠將它包含在json對象中。但是,這是行不通的'數據:{ JSON:JSON.stringify({ 名稱: 「托馬斯!」, 延遲:3 }) }' – 1252748

+0

@thomas看到http://jsfiddle.net/arunpjohny/A4uJu/2/....延遲應傳遞給'數據'而不是'json' –

+0

非常感謝。 – 1252748

2

你是正確的,JQuery的返回一個Deferred對象實例。

因此,應該被調用完成()的對象來獲取數據:

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

$.ajax()返回jqHXR實例(它實現了遞延模式)。當你從返回jqHXR對象的函數返回它時。這實現了一個傳遞迴調函數的done()方法。

+0

so'return $ .ajax({...});'你真的回來了什麼?該延遲對象是否簡單地構建到$ .ajax中,以便當jQuery在它之前看到返回時,它知道返回延遲對象,或者是延遲對象內的$ .ajax對象本身。我不明白語法。 – 1252748

+0

另外,非常感謝您的幫助! – 1252748