2012-12-15 218 views
1

目前,我得到一個JSON響應是:轉換JSON響應JavaScript數組

[{"id":1,"title":"Test 1 "},{"id":2,"title":"Test 2"}] 

,我想將其轉換爲一個名爲「事件」象下面這樣的JavaScript數組,所以我可以退貨:如:

return { 
    events : [ 
     { 
      "id":1, 
      "title":"Test 1" 
     }, 
     { 
      "id":2, 
      "title":"Test 2" 
     } 
    ] 
    }; 

我碰到一個jQuery AJAX調用的響應:

jQuery.ajax({ 
     type: "POST", 
     url: "calendar.aspx/get_all_events", 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (msg) { 
      document.write(msg.d); 
     }, 
     error: function (XMLHttpRequest, textStatus, errorThrown) { 
      alert('Error getting events from database.'); 
     } 
    }); 

任何人都知道我怎麼能轉換將msg或msg.d轉化爲需要的東西?

感謝,

+1

什麼是msg.d?你的迴應似乎已經是你需要的格式了。 – closure

+0

你不能使用'eval(msg.d)'嗎? –

+0

頁面加載完成後,您無法使用'document.write' – charlietfl

回答

0

我認爲你只是需要這樣的:

success: function (msg) { 
     // The event object is what you require 
     var eventObj = {events:msg.d}; 
     document.write(eventObj); 
    }, 
0

如果msd.d是

[{"id":1,"title":"Test 1 "},{"id":2,"title":"Test 2"}] 

,那麼你可以這樣回吧:

return { 
    events : msg.d 
    }; 

但你必須做一個回調爲了返回它。因爲ajax是異步的。我加了回報,因爲那是你想要的。另一種方法是讓ajax調用同步。

2

您可以使用:

return {events: JSON.parse(msg.d)}; 

,或者更好的兼容性:

eval("var result = "+msg.d); 
return {events: result}; 

或jQuery的解決方案

return {events: $.parseJSON(msg.d)}; 
0
function doXHR(callback) { 
    jQuery.ajax({ 
     type: "POST", 
     url: "calendar.aspx/get_all_events", 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (event) { 
      callback && callback(event); 
     }, 
     error: function (XMLHttpRequest, textStatus, errorThrown) { 
      alert('Error getting events from database.'); 
     } 
    }); 
} 

doXHR(function(event) { 
    var data = { events: event.d }; 
    // Do other stuff with data here (processing, displaying, etc.). 
    // You can call other functions here and feed them with data. 
}); 

注意XHR請求是異步的。您不能簡單地返回XHR請求數據。您必須將所有進一步的代碼放入回調函數中,以便可以在陣列可用時處理它。