jQuery загружает фрагмент для нескольких целей один раз

#ajax #jquery #load

#ajax #jquery #загрузка

Вопрос:

Я загружаю параметры для нескольких списков выбора, используя load и fragment.

Это то, что у меня есть:

 $(document).ready(function(){
        $("#select1").load("ts.xml #select1", 
                 function (responseText, textStatus, XMLHttpRequest) {
                   if (textStatus == "success") {
                        alert("Loaded select 1");

                   }  

        $("#select2").load("ts.xml #select2", 
                 function (responseText, textStatus, XMLHttpRequest) {
                   if (textStatus == "success") {
                        alert("Loaded select 2");

                   }     
    });
  

И мой html выглядит так:

 <li id="select1" class="left"></li>
<li id="select2" class="left"></li>
  

где ts.xml выглядит примерно так:

 <select id="select1">
<option>Lorem</option>
<option>Ipsum</option>
<option>Lorem Ipsum</option>
</select>
<select id="select2">
<option>Lorem</option>
<option>Ipsum</option>
<option>Lorem Ipsum</option>
</select>
  

Как я могу загрузить ts.xml один раз и продолжать извлекать из него фрагмент?Обратите внимание, что каждый раз, когда я извлекаю фрагмент, я хочу предупредить об успехе не на ts.xml нагрузка.

Большое спасибо

Ответ №1:

Загружайте один раз, кэшируйте, затем используйте кэшированную версию:

 $(document).ready(function(){
    var response;
    $("#select1").load("ts.xml #select1", 
        function (responseText, textStatus, XMLHttpRequest) {
           if (textStatus == "success") {
                response = responseText; // this will be your xml response
                // now you can use 'response' anywhere inside the doc.ready function
           }
        });    
});
  

Комментарии:

1. Не могли бы вы показать мне, как я могу вспомнить для select2 с «ответом» в качестве XML-кэша? Я понял концепцию этого, но я не знаю, как это сделать, поэтому я задал вопрос. Большое спасибо

2. ответ @adeneo был бы способом сделать это. Если вы преобразуете response в объект jQuery ( response = $(responseText)), то вы можете использовать методы jQuery для его синтаксического анализа. Итак, когда вам нужно заполнить #select2, вы просто берете response переменную и манипулируете ею таким образом.

Ответ №2:

Я думаю, я бы, вероятно, вернулся к базовой функции $ .ajax и сделал что-то вроде этого.

 var xmlData;

function getXML() {
  $.ajax({
    type: "GET",
    url: "ts.xml",
    dataType: "xml",
    error: function() {
    $("#mydiv").append("<p>File Not Found!</p><br />");
    },
    success: function(xml){
        xmlData = $(xml);
    }
});
  

Теперь вы можете искать данные где угодно, по крайней мере, я так думаю, не проверял, но не понимаю, почему нет?

 var Searchvalue = "Lorem";

xmlData.find("select1").find("option:contains('"   Searchvalue   "')").each(function(){
        // do something
        });