如何在范围外访问$ .ajax成功变量以在其他函数中使用?

时间:2011-10-27 19:18:24

标签: ajax jquery

在发布这篇文章之前,我已经阅读了但是我仍然不清楚如何实现这一目标。 我正在收到一个xml文件并设置一些变量,如何访问ajax成功之外的所有变量以便在其他函数中使用?

    $.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("<option value='" + productID + "'>" + productName + "</option>");
        });
    }
}); //End ajax

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

5 个答案:

答案 0 :(得分:2)

在一个地方定义变量,使它们在两个函数的范围内, 比如

var productID;

在$ .ajax中使用它们作为

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

答案 1 :(得分:2)

我认为最好创建回调函数:

$.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 :(得分:1)

您必须处理定义变量的范围,因为您在ajax success函数中定义了变量,所有变量都属于该范围,因此在该函数之外定义的任何其他函数都会赢得'能够“看到”那些变量,你可以在一个范围内的success函数之外定义它们,任何其他函数都可以像全局范围一样“看到”它们,但这有点混乱。看看这本书,它将向你展示一些关于范围和闭包的好例子:

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

答案 3 :(得分:0)

您可以将var productID更改为window.productID以使其成为全局。请记住在使用全局变量时要小心,因为命名问题可以发挥作用。

答案 4 :(得分:0)

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("<option value='" + productID + "'>" + productName + "</option>");
        });
    }
}); //End ajax

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