2009-12-09 97 views
1

我正在對ajax進行jQuery同步調用 - 返回類型設置爲「json」 - 但返回數據以字符串形式返回。有什麼我做錯了,或者有沒有將字符串轉換爲對象?通過jquery返回字符串的同步ajax調用返回字符串

var ajax_response = $.ajax({url:"ajx_services", async:false, type:"post", data:{method: "getItem", item_no: $(ctx).val()}, dataType:"json"}); 
var data = ajax_response.responseText; 

AJAX調用工作,因爲我可以看到在調試的結果,它只是返回的數據是一個字符串。

回答

1

responseText將始終是一個字符串。在$ .ajax()中添加一個帶有參數的'success'回調函數,這將是JSON數據。

$.ajax({ 
    -- other stuff -- 
    , success: function(data) 
    { 
     // do something with data 
    } 
}); 
1

那是因爲$。阿賈克斯()將返回一個實際的XMLHttpRequest ..其responseText沒有JSON等概念

試試這個:

var data = (function() { 
    var ajaxResponse = ''; 
    $.ajax({url:"ajx_services", async:false, type:"post", data:{method: "getItem", item_no: $(ctx).val()}, success: function (data) { 
     ajaxResponse = data; 
    }, dataType:"json"}); 
    return ajaxResponse; 
}()); 

由於的定義在ajax()調用中定義的函數的父關閉時,它可以設置爲由success函數提供的JSON data對象(在Ajax請求成功完成時調用該對象) ETES)。然後,由父閉包返回,然後將其分配給外部變量data

請注意,從ajax()立即返回修改後的的功能是唯一可能的,因爲該請求是同步的。如果它是異步的,return ajaxResponse很可能會返回一個空字符串。

+0

謝謝! ......像冠軍一樣工作;我錯誤地懷疑async:false的成功功能。 – user228148 2009-12-10 21:56:56

0

這樣應該工作,使用eval函數:

var ajax_response = $.ajax({url:"ajx_services", async:false, type:"post", data:{method: "getItem", item_no: $(ctx).val()}, dataType:"json"}); 
ajax_response.onreadystatechange = xHandler; 

function xHandler() { 
    if (ajax_response.readyState == 4) { 
    var data = eval('(' + ajax_response.responseText + ')'); 
    } 
} 

但因爲已經講過,你應該使用jQuery的成功回調,它的存在是爲了讓您的生活更輕鬆。