Jquery JSON和XML同时加载/功能性能改进

时间:2013-01-31 14:53:33

标签: jquery xml json

我有一些jquery正在从xml文件中加载一些信息以用作Dictionary,然后是一些json。我目前有代码工作但是它必须在加载json之前等待xml加载成功。我想要做的是加载xml和json,将数据存储在变量中,然后当两个加载另一个函数时。这可能吗?

这是我目前的代码......

$(document).ready(function () {
    var dict = {};
    $.ajax({
        type: "GET",
        url: "/_layouts/SiteLocations.xml",
        dataType: "xml",
        success: function (xml) {
            $(xml).find('type').each(function () {
                var key = $(this).find('key').text().replace(/ /g, '_');
                var definition = $(this).find('definition').text();
                //assign key and definition to dictionary
                dict[key] = definition;
            });
            getsites(dict);
        }
    });
});

function getsites( dict) {
        $.getJSON('/_layouts/SiteLocations.ashx', function (json) {
            //handle data
            $.each(json, function (i, item) {             
                //create web friendly id
                var sitetype = item.Type.replace(/ /g, '_');
                //check if list exists, if not create
                if ($('ul[name=' + sitetype).length) {
                    //add list item
                    $('ul[name=' + sitetype).append('<li><a href="' + item.URL + '">' + item.Title + '</a></li>');
                }
                else {
                    //create list and add item   
                    $('#ListContainer').append('<div id="' + sitetype + '"></div>');
                    $('#' + sitetype).append(dict[sitetype] + '<br />');
                    $('#'+sitetype).append('<ul name="' + sitetype + '" />');
                    $('ul[name=' + sitetype).append('<li><a href="' + item.URL + '">' + item.Title + '</a></li>');
                }
            });

        });

}

1 个答案:

答案 0 :(得分:2)

是的,你可以jQuery deferred objects

$.when( getJSONstuff, getXMLstuff ).then( function(jsonResp, xmlResp){

    // do stuff here

})

其中getJSONstuffgetXMLstuff是您的职能。

当从服务器返回两个响应时,将触发[匿名]回调。

编辑:订单已修复。