2013-06-16 5 views
1

Мне нужно, чтобы заполнить мой массив с информацией, когда я перетащить элемент в корзину зоны свиноматку в перетащить даже ти поместить эту функциюКак передать массив с AJAX

var ProductInfo=new Array(); 
myGlobalArray=GetProductById(iProductId); 

, что называют эту функцию Ajax

function GetProductById(iProductId) 
{ 
var ProductInfo=new Array(); 
     console.log("2"); 
    $.ajax({ 
        type: 'POST', 
        url: 'services/ManageCategoriesServices.asmx/GetProductById', 
        dataType: 'xml', 
        'data': {'iProductId': iProductId }, 
        success: function(data) { 

             source = null; 
             try 
             {  
              console.log("source product-> ",data.activeElement.childNodes); 
              myGlobalArray=TestProduct(data.activeElement.childNodes); 

console.log("In Ajax myGlobalArray-> ",myGlobalArray);           return myGlobalArray; 
             } 
             catch(e) { 
              $('#m_lblStatus').text('failed to read json'); 
             } 
           }, 

        fail: function() { $('#m_lblStatus').text('fail');}  

      }); 

       return myGlobalArray; 

} 

Я проверил, что мой myGlobalArray получить полную информацию, что мне нужно, но когда я вернусь к моей первой функции, когда я пытаюсь скопировать массивы

myGlobalArray=GetProductById(iProductId); 

он пуст, и он говорит

Есть не возражает ни один ребенок

Я использовал глобальный массив, так как обычно не будет работать, так что я думал, что глобальное будет работать , но не в AJAX я вижу полный, но в первой функции он пуст.

In Ajax myGlobalArray-> ["medium_101-01-004-02.jpg", "303", "101-01-004-02", "44.95"] 


After Ajax myGlobalArray-->[] There are no child objects 

В чем проблема?

ответ

2

AJAX означает «Асинхронный Javascript и XML». Асинхронное ключевое слово в этой ситуации. Проблема заключается в следующем: возврат выполняется до того, как ваш запрос будет завершен. Решение: Вы можете использовать переменную myGlobalArray в OnSuccess обработчика события или использовать Ajax с асинхронным == ложным вариантом, как это:

$.ajax({ 
    ..., 
    async: false, 
    ..., 
}); 
+0

Обратите внимание, что установка 'асинхронное: false' * не * рекомендуется решение, поскольку оно неизбежно [ приводят к другим проблемам] (http://stackoverflow.com/questions/17146392/function-in-javascript-take-to-maucu-time-and-this-stop-the-scipt). – JJJ

+0

Хм ... Я использовал его несколько раз, но не получаю этих неприятностей, но я буду осторожен в будущем, спасибо за совет. –

Смежные вопросы