2011-10-27 6 views
2

これを投稿する前に私は読んだことがありますが、これを達成する方法はまだ分かりません。 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() {...}); 

答えて

0

あなたはアヤックスsuccess関数内で自分の変数を定義しているので、すべての変数は、そのスコープに属しているので、その関数外で定義された他の機能は」勝った、変数が定義された範囲の世話をする必要がありますその変数を "見る"ことができれば、スコープ内の関数successの外で定義することができます。他の関数はグローバルスコープのように "見る"ことができますが、それはちょっと面倒です。この本を見て、それはあまりにもあなたのスコープとクロージャに関するいくつかの良い例を示します:

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

1

、彼らは両方の機能の範囲にあるような場所でそのような

var productID; 

$

、変更することができます
productID = $(this).find('id').text(); 
0

としてそれらを使用アヤックスインサイドとして を変数を定義たとえば、var productIDwindow.productIDとなり、グローバルになります。命名の問題が出現するようにグローバル変数を使用する際は注意してください。

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() {...}); 
1

を私はコールバック関数を作成するために、より良いと思う:

$.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");