Mam listę rozwijaną, która jest zaludniona dynamicznie. Wysyłam pewne żądanie AJAX i uzyskać odpowiedź i na podstawie warunku jest wypełniony. Teraz muszę przechowywać te zaludnioną listę w Localstorage, ponieważ będę musiał wyświetlić wartości, które zostały wypełnione wcześniej na stronie Odświeżanie strony.

Wszystko działa dobrze, z wyjątkiem tego, że otrzymuję tylko ostatnią wartość zaludnioną na liście rozwijanej. Nie wszystkie wartości zostały wcześniej wypełnione. Muszę odzyskać wszystkie wartości, które wcześniej zostały wypełnione.

index.jsp

<input type="radio" class="radioButton" value="Display all" checked onclick="fnCheck();"> Display All

<input type="radio" class="radioButton" value="Display Divisions" onclick="fnCheck();"> Display Divisions


    <input type="radio" class="radioButton" value="Display Data" onclick="fnCheck();"> Display Data 
    <select id="convoy_list">
    <option>Values</option>
    </select>
    <input type="button" id="testbtn" value="Test" onclick="fnClickTest();" >
    <input type="button" id="ok" value="OK" onclick="fnOK();" >
    <input type="button" id="Refresh" value="Refresh" onclick="fnDisplay();" 

myjs.js

function test(){
    $.ajax({
    //some requests and data sent
    //get the response back

    success:function(responsedata){
        for(i=0;i<responsedata.data;i++):
        {
            var unitID=//some value from the ajax response
            if(somecondition)
            {
                var select=$(#convoy_list);
                $('<option>').text(unitID).appendTo(select);
                var conArr=[];
                conArr=unitID;
                test=JSON.stringify(conArr);
                localStorage.setItem("test",test);
            }
        }
    }
    });
}

W innej funkcji pojawia się wyświetlacz () Staram się pobrać wartości LocalStorage

    function display(){
    if(localStorage.getItem("test")){
    var listId=$(JSON.parse(localStorage.getItem("test")));
    var select=$(#convoy_list);
        $('<option>').text(listId).appendTo(select);

    }

Oto, jeśli dane zaludnione na liście rozwijanej jest C1 C2 i C3 dla instancji. Po odświeżaniu strony znajduje się tylko C3 w rozwijanym. Chcę wszystkie wartości, tj. C1, C2, C3, które mają być zaludnione po odświeżaniu. Jak mogę to osiągnąć?

2
user3201640 18 sierpień 2014, 14:19

2 odpowiedzi

Najlepsza odpowiedź

Ponieważ David powiedział, że nadpisujesz przedmiot w Localstorage. Klucz, który nazywasz, powinien być zawsze wyjątkowy. Wartość klucza zmienia się na każdej iteracji, ale nie nazwa klucza. Stąd przechowywać go, musisz użyć klucza z różnymi nazwami na każdej iteracji. Zamiast używać

localStorage.setItem("test",test);

Posługiwać się

localStorage.setItem("test"+i,test);

To na pewno się nie nadpisuje. I podczas pobierania Użyj tego na swoim wyświetlaczu ()

function display(){
for(var i=0;i<localStorage.length;i++){
    if(localStorage.getItem("test"+i)){
    var listId=$(JSON.parse(localStorage.getItem("test"+i)));
    var select=$(#convoy_list);
        $('<option>').text(listId).appendTo(select);

    }
  }
}

Spowoduje to załączenie wszystkich wartości na liście rozwijanej, która była wcześniej zaludniona.

2
Vidya 19 sierpień 2014, 07:53

Nadpisujesz przedmiot w Localstorage z każdą iteracji, ponieważ klucz jest zawsze "test".

Możesz zmienić klucz do:

localStorage.setItem("test-"+i,test);

Uczyniłoby to wyjątkowe i wszystkie wartości byłyby przechowywane. Możesz zmienić klucz do czegoś trochę bardziej opisowy.

Lub wystarczy przechowywać odpowiedź z telefonu AJAX, aby utworzyć funkcję, która tworzy listę rozwijanych, które można nazwać zarówno w sukcesie AJAX, jak iw funkcji wyświetlania.

2
David Jones 18 sierpień 2014, 14:28