我们可以使用jquery动态地一次加载两个xml文件吗?

时间:2013-05-24 04:52:04

标签: jquery xml jquery-mobile

通过使用“AJAX”我们可以加载像xml / json这样的文件。但是有没有可能使用AJAX或者获取两个xml的时间。

AJAX:

$.ajax({
        url: 'test.xml',
        type: "get",
        context: this,
        success: function (data) {
            alert("success");
        },
        error: function () {
            alert("failure");
        }
    });

先谢谢。

2 个答案:

答案 0 :(得分:2)

简介

可以轻松完成, jQuery 甚至提供的方法可以帮助您在心跳中完成此操作。基本上你只需要链接几个ajax调用,然后在完成后用 $.when 进行处理。

实施例

工作示例:http://jsfiddle.net/Gajotres/qNJS8/

在此示例中,您可以使用 $.ajax 功能查看3个不同的来电。还有一个警告,因为 jsFiddle 不支持ajax调用获取xml所有检索到的数据都是虚拟数据,您只需要用正确的 URL替换它

<强>使用Javascript:

$(document).on('pagebeforeshow', '[data-role="page"]',function(e,data){  
    // Multiple Ajax Requests 
    $.when( 
        parseXML({xml: "<cars><car><name>TOYOTA</name><country>JAPAN</country><pic>http://1call.ms/Websites/schwartz2012/images/toyota-rav4.jpg</pic><description>Toyota has announced that it will recall a total of 778,000 units that may have been manufactured with improperly-tightened nuts on the rear suspension.</description></car></cars>"}) , 
        parseXML({xml: "<cars><car><name>RENAULT</name><country>FRANCE</country><pic>http://cdn2.carsdata.net/thumb/182x105/pics/Renault/renault-sandero-16-stepway-01.jpg</pic><description>Renault Sandero 16 Stepway - this car is manufactured by renault. Renault Sandero 16 Stepway - Get car information and expert advice from CarsData.</description></car></cars>"}) , 
        parseXML({xml: "<cars><car><name>AUDI</name><country>GERMANY</country><pic>http://img2.netcarshow.com/Audi-RS6_Avant_2014_800x600_wallpaper_06.jpg</pic><description>The new Audi RS6 Avant unites 412 kW (560 hp) of power and 700 Nm (516.29 lb-ft) of torque with unrestricted practicality for everyday use and leisure.</description></car></cars>"})
    ).done(
        function(data1, data2, data3)
        {
            var allData = [].concat(data1).concat(data2).concat(data3);
            $(allData).find("car").each(function(){
                $('#cars-data').append('<li><a href="#cars"><img src="' + $(this).find('pic').text() + '" title="sample" height="100%" width="100%"/><h3>Car type:<span> '+ $(this).find('name').text() +'</span></h3><p>' + $(this).find('description').text() + '</p></a></li>'); 
            })
            $('#cars-data').listview('refresh');            
        }
    ).fail(
        function()
        {
            alert('Fail');  
        }
    );

    function parseXML(data)
    {
        return $.ajax({
            type: "POST",
            url: "/echo/xml/",
            dataType: "xml",
            data: data,
            success: function(data) {}
        });
    }   
});

说明

基本上要了解这一点,您只需要了解方法 $.when 。它接受多个函数作为参数,并提供 done fail回调。如果我们正在阅读相同类型的数据,我们可以使用 concat 函数将所有内容合并在一起。之后用你的数据做任何你想做的事。

答案 1 :(得分:0)

是的,你可以发起两个ajax请求:

$.ajax({
    url: 'test.xml',
    type: "get",
    context: this,
    success: function (data) {
        alert("success");
    },
    error: function () {
        alert("failure");
    }
});
$.ajax({
    url: 'test2.xml',
    type: "get",
    context: this,
    success: function (data) {
        alert("success");
    },
    error: function () {
        alert("failure");
    }
});

如果您想了解更多信息,请参阅问题jQuery: Making simultaneous ajax requests, is it possible?

答案摘录:

“你想要异步(这是默认的)。浏览器在任何给定时间限制你两个请求。这是HTTP规范的一部分。(HTTP 1.1规范,第8.1.4节)”