Hoe toegang krijgen tot $ .ajax succesvariabelen buiten scope om te gebruiken in andere functies?

Voordat ik dit heb gepost heb ik het doorgenomen maar ik ben nog steeds niet duidelijk hoe dit te bereiken. Ik ontvang een xml-bestand en stel een variabele in, hoe kan ik toegang krijgen tot alle variabelen buiten het ajax-succes voor gebruik in andere functies?

    $.ajax({
    type: "POST",
    url: getProductList,
    data: reqProductXML,
    dataType: "xml",
    contentType: "text/xml; charset=\"utf-8\"",
    success: function (data) {
        $(xml).find('product').each(function() {
            var productID = $(this).find('id').text();
            var productName = $(this).find('name').text();
            var productCurrency = $(this).find('currency').text();
            var productDescription = $(this).find('description');
            var sipAccess = $(this).find('sipAccess');
            var skypeAccess = $(this).find('skypeAccess');
            var localAccess = $(this).find('localAccess');
            var rechargeable = $(this).find('rechargeable').text();

           $('#urProductSelect').append("");
        });
    }
}); //End ajax

   //I need to use the variable out here....
   $('#urProductSelect').change(function() {...});
3

5 antwoord

Definieer variabelen op een zodanige plaats dat ze binnen de reikwijdte van beide functies vallen, zoals

var productID;

Gebruik $ .ajax als

productID = $(this).find('id').text();
2
toegevoegd

Ik denk dat het beter is om de callback-functie te maken:

$.post(site_url+"admin/jx_get_group_attibutes", {product_id:id}, function(rdata) {

            if(rdata.status == 'success') {
                print_link_products(rdata);//callback function
            }
            else {
                alert(rdata.result);
                return false;
            }
        }, "json");
2
toegevoegd

U moet zorgen voor het bereik waarin de variabelen zijn gedefinieerd, omdat u uw variabelen binnen de functie ajax succes definieert, alle variabelen behoren tot dat bereik, dus elke andere functie die buiten die functie is gedefinieerd, heeft gewonnen ' t kunnen die variabelen "zien", je kunt ze buiten de succes -functie definiëren binnen een bereik dat elke andere functie in staat zal zijn om ze te "zien" als de globale scope maar dat is nogal rommelig . Neem een ​​kijkje in dit boek. Het zal je ook enkele goede voorbeelden laten zien over de scope en sluitingen:

http://jqfundamentals.com/book/index.html#example-2.44

1
toegevoegd
var productID, productName, productCurrency, productDescription, sipAccess, skypeAccess, localAccess, rechargeable;
$.ajax({
    type: "POST",
    url: getProductList,
    data: reqProductXML,
    dataType: "xml",
    contentType: "text/xml; charset=\"utf-8\"",
    success: function (data) {
        $(xml).find('product').each(function() {
            productID = $(this).find('id').text();
            productName = $(this).find('name').text();
            productCurrency = $(this).find('currency').text();
            productDescription = $(this).find('description');
            sipAccess = $(this).find('sipAccess');
            skypeAccess = $(this).find('skypeAccess');
            localAccess = $(this).find('localAccess');
            rechargeable = $(this).find('rechargeable').text();

           $('#urProductSelect').append("");
        });
    }
}); //End ajax

   //I need to use the variable out here....
   $('#urProductSelect').change(function() {...});
0
toegevoegd

U kunt bijvoorbeeld var productID in window.productID veranderen om het globaal te maken. Vergeet niet voorzichtig te zijn bij het gebruik van globale variabelen, omdat problemen met de naamgeving een rol kunnen spelen.

0
toegevoegd