0

xmlファイルからいくつかの情報をロードして辞書として使用するjqueryがあり、次に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>');
                }
            });

        });

}
4

1 に答える 1

2

はい、できます。jQueryの遅延オブジェクトを使用します。

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

    // do stuff here

})

ここでgetJSONstuffgetXMLstuffはあなたの機能です。

[匿名]コールバックは、両方の応答がサーバーから返されるときに発生します。

編集:順序が修正されました。

于 2013-01-31T15:04:12.637 に答える