WebHU - Programozási kérdések és válaszok

A $.get() változójának használata

Kérjük, tekintse meg a $.get()-et. A nextId változót kell használnom a következő $.post()-ban, de az a probléma, hogy nem definiálom a $.get() hatókörén kívül.

$('#addbtn').click(function(){

    var insname = $('#ins').val();
    var itemexist = false;

    $.each($('#selname option'), function(key, value){
        if($(this).text() == $.trim(insname)){
            itemexist = true;
            alert("Item already exists: "+$(this).text());
        }
    });

    if(insname=='') alert("Cannot be empty");

    if(!itemexist && insname!='') {

        $.get('data1.php',

            function(retId){
                var nextId = retId;
                var incrementlength = 1;
                incrementlength+= $('#selname option').length;

                $('#selname').attr('size',incrementlength);
                $('#selname')
                    .append($('<option></option>')
                    .attr('value', nextId).text(insname));
                $('#ins').val('');
            });

        alert(nextId);//nextId is not defined
        $.post('data1_1.php', {id: nextId, name: insname},);
    }
});

Kösz

27.03.2011

Válaszok:


1

Itt az történik, hogy a nextId aszinkron visszahívás közben van beállítva, így a riasztás hívásakor a nextId nincs definiálva, mert még nincs beállítva. Ha a visszaadott nextId-t szeretné használni a $.post()-ben, akkor a $.get() visszahívás befejezése után hívnia kell a $.post()-t. Módosítsa a kódot az alábbiak szerint, és működnie kell:

Próbáld ezt:

$('#addbtn').click(function(){

    var insname = $('#ins').val();
    var itemexist = false;

    $.each($('#selname option'), function(key, value){

        if($(this).text() == $.trim(insname)){
            itemexist = true;
            alert("Item already exists: "+$(this).text());
        }
        });

        if(insname=='') alert("Cannot be empty");
        if(!itemexist && insname!=''){
        $.get('data1.php',
                function(retId){
                    var nextId = retId;
            var incrementlength = 1;
            incrementlength+= $('#selname option').length;
            $('#selname').attr('size',incrementlength);
            $('#selname').append($('<option></option>').attr('value', nextId).text(insname));
            $('#ins').val('');
            alert(nextId);//nextId should be defined
            $.post('data1_1.php',
                    {id: nextId, name: insname},
                    );
            }
        });


});
27.03.2011
  • Igen, a stackoverflow-nál szinte mindig az a válasz nyer, amely kevesebb gondolkodást jelent az OP számára, lol 27.03.2011
  • Ööö... Új vagyok a SO közreműködésében. Korábban többnyire olvasni és elhagyni típusú voltam. Nem tudtam, hogy a válaszoknak el kellene gondolkodtatniuk a kérdezőket. Csak a tőlem telhető legjobb (IMO) választ adtam. 27.03.2011
  • @asleepysamurai: persze, semmi személyes ;-) De 1) rossz eredményt adtál az első próbálkozásra 2) a határozószó szerint: Adj egy halat az embernek; megetetted őt mára. Taníts meg egy embert halászni; és egy életen át etetted 27.03.2011
  • Köszönöm szépen. Megpróbáltam kívülről deklarálni, hogy globális legyen, de nem tudtam a részt (nextId = retId, a var deklaráció nélkül) 27.03.2011
  • @zerk ez igaz lehet, de a válaszod még mindig több pozitív szavazatot kapott. (természetesen tőlem egyet) :-) 27.03.2011
  • @zerkms & eddy: Igen, elnézést az első válaszért, nem olvastam el rendesen a kódot, és elsiettem a válasszal. Az én hibám. 27.03.2011
  • @asleepysamurai: ez rendben van. -1-ről +1-re változott 27.03.2011
  • @Shadow Wizard: nem most ;-) -1-et +1-re változtattam, mivel asleepysamurai új itt, és nagyon jó srácnak tűnik ;-) És persze azért, mert helyes választ adott. 27.03.2011
  • @zerk jelenleg 4-ed van, míg Álmos úrnak csak 3-a... Azt hiszem, ez az aranyjelvény arra csábítja az embereket, hogy szavazzanak rád! :-D 27.03.2011
  • @Shadow Wizard : argh!!!! Ez soha nem történik meg, amikor valóban szükségem van a válaszomra ;-) 27.03.2011
  • @zerk igen, Murphy törvénye a maga teljes pompájában. ;) 27.03.2011
  • Alig vettem észre a revíziót, azon gondolkodtam, hogyan lehetne mindezt egyetlen $.get()-ben elkészíteni, ahogy a zerkms mondta. Nagyon köszönöm! 27.03.2011

  • 2

    Ez azért van, mert a $.get aszinkron módon történik (ezt jelenti a A a AJAX-ban)

    Tudsz:

    1. Módosítsa a $.get értéket $.ajax-re, és tegye szinkronba a async: false opcióval
    2. (előnyös) Az összes munka elvégzéséhez $.get visszahívásban
    27.03.2011
  • Köszönöm a választ.A 2-es számú (előnyben részesített) válaszára gondoltam.Hogyan csinálnám?A $.get-et használtam a max(id) lekéréséhez, és a beviteli szöveggel együtt egy kiválasztott listához való hozzáfűzéshez. Megpróbáltam a $.post segítségével tárolni a kulcsot/értéket egy db-ban. Még egyszer köszönöm a segítséget. 27.03.2011
  • @eddy: #2 pontosan ezt javasolta @asleepysamurai válaszában. 27.03.2011
  • az én hibám..nem vettem észre, hogy sleepysamurai átdolgozta. Megtanultam csinálni, és soha nem gondoltam volna, hogy a $.get és a $.post egymásba ágyazhatók. Azon törtem a fejem, hogyan lehet mindezt egyetlen $-ba betömni. Get, mint a válaszában. 27.03.2011
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..