2015-08-21 64 views
2

我爲Wordpress插件編寫腳本,並有Ajax響應問題。當我想要得到json文件時,jQuery.ajax返回{readyState: 1}。 jQuery.ajax與async: false返回純文本,雖然我有dataType: 'json'jQuery ajax返回readyState 1或不正確的數據類型

App.Language = { 

    GetLanguageFile: function(lang) { 
     var LangFile = GetJsonLanguageFile(lang); 
     return LangFile; 
    }, 

} 

function GetJsonLanguageFile(lang) { 
    var json = $.ajax({ 
     url: ajaxurl, 
     type: 'POST', 
     dataType: 'json', 
     // async: false, 
     data: {action:'adminajax',method:'GetJsonLanguageFile',language: lang}, 
    }) 

    return json; 
} 

當函數返回的readyState:1,在控制檯我有對象從JSON文件密鑰「responseText的」和純文本的結果,但我不能讓這個鍵值,當函數是異步,返回的對象我可以得到結果,但它是一個純文本,雖然我有dataType:'json'。

我做錯了什麼?如何從這個json文件內容製作普通的對象?

+0

當'async'是假的,你沒有得到一個jQXHR對象'$阿賈克斯返回「,這是你的意思? – vard

+0

不,async爲false時函數返回具有正確responseText的對象。我不想用async false – Damian

+0

好吧,現在用async false,$ .ajax返回json對象。我必須在json文件中更改'to',但仍然無法正常工作false – Damian

回答

3

Ajax調用返回的承諾,所以你必須使用done menthod與結果的工作,例如:

function GetJsonLanguageFile(url, lang) { 
     return $.ajax({ 
      url: url, 
      type: 'POST', 
      dataType: 'json', 
      // async: false, 
      data: {action:'adminajax',method:'GetJsonLanguageFile',language: lang}, 
     }); 
} 

GetJsonLanguageFile('some.url', lang).done(function(data) { 
    // if it returns string insted of JSON try it: 
    data = $.parseJSON(data); 
    // do rest 
    // window.json = data; 
}); 
+0

完成函數不返回任何內容 – Damian

+0

因爲不能返回它,所以如果要將它取出到函數體外,必須將其綁定到全局變量,例如'window.json = data;'但是,你應該在函數體內做所有的事情 – edrw

+0

這實際上是一個很好的AJAX包裝器的候選者,即使不需要棄用'asycn:false'謝謝,愛它 – wpcoder