2016-02-27 21 views
1

我很困惑,因爲我有兩個函數,一個使用ajax獲取數據,另一個使用字符串獲取數據。JQuery:解析ajax調用與嵌入的str

function loadMenuData() { 
    $.ajax({ 
    url: "./shoulders.json", 
    success: function(data) { 
     dataObj = $.parseJSON(data); 
    $.each(dataObj, function(key, value) { 
     $(document).find("#dropDownDest").append($('<option></option>').val(value.id).html(value.name)); 
    }); 
    } 
}); 
} 
function loadMenuDataX() { 
    var str = '[{"id":"A","name":"Bart"},{"id":"B", "name":"Joe"},{"id":"C", "name":"Gomer"}]'; 
    dataObj = $.parseJSON(str); 
    $.each(dataObj, function(key, value) { 
     $(document).find("#dropDownDest").append($('<option></option>').val(value.id).html(value.name)); 
    }); 
} 

我創建的文件shoulders.json買粘貼單引號'到文件之間的str。如果我撥打loadMenuX,它會正確填寫<select></select>。如果我叫loadMenu,它不填寫任何東西。

  1. 我已經試過JSON.parse代替上面並獲得相同的行爲。我不能使用$("#dropDownDest"),只好使用$(document).find。爲什麼?

  2. 打到DOM每個循環似乎是過度的。什麼是更好的方式來做ajax版本,它會工作,更好?

+0

如果返回有效的json,你不應該在'ajax'調用中使用'parseJSON()'。你應該用http://jsonlint.com/來檢查你的json是否是有效的json,然後你應該使用你的開發者控制檯來查看ajax調用是否拋出任何錯誤,或者更好的添加一些錯誤處理到你的'ajax'呼叫。 – Craicerjack

回答

2

什麼會是一個更好的方式做AJAX版本,將工作和更好嗎?

因爲你正在試圖獲得更好的辦法是使用jQuery.getJSON() JSON文件,所以你一定會返回的結果是JSON格式:

$.getJSON("./shoulders.json", function(json) { 
    $.each(json, function(key, value) { 
     $("#dropDownDest").append('<option value="+value.id+">'+value.name+'</option>'); 
    }); 
}); 

希望這有助於。

+0

謝謝Acharki!這有幫助。我重新閱讀jQuery文檔,因爲parseJSON,JSON.parse和getJSON與$ .get之間的差異,接下來可能是parseJSON或JSON.parse對我來說不是很清楚。 –