2016-04-12 5 views
0

мне нужно вернуть значение из AJAX, но он заполнил 0 каждый раз, и не ждать, пока процесс АЯКС закончил var itemId=0; как глобальное значениемне нужно вернуть значение из AJAX

getitemIDbyProductID(productId,getitemIDbyProductID_success);    
       alert(itemID + "itemgeted") 

Я сделал это

function getitemIDbyProductID(productId, callback) { 
      $.ajax({ 
       type: "POST", 
       url: "Cot.aspx/getitemIDbyProductID", 
       data: JSON.stringify({ productId: productId }), 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function (result) { 
        var value = 0; 
        value = JSON.parse(result.d); 
        itemID=callback(value) 
        callback(value); 
       }, 
       error: function (msg) { } 
      }); 
     } 

     function getitemIDbyProductID_success(total_percentage) {  
       alert(total_percentage +"fds"+itemID); 
     } 

но не ждать Аякса закончена, и дает мне Itemid = undefiend

+0

Это просто безнадежно, пытаясь получить значение itemId :(, что мне делать? –

+0

Я предположил, что это заголовок дубликата [Как вернуть ответ от асинхронного вызова?] (Http: // stackoverflow.com/questions/14220321/how-do-return-the-response-from-an-asynchronous-call) (я все еще думаю, что это может быть), но мне трудно понять, какова ваша точная проблема, так как вы 't 'return' ничего, и вы, кажется, используете обратный вызов, но вы используете * * устанавливаете * значение * внутри * свою функцию успеха Ajax (?) вместо того, чтобы передавать значение из нее. – apsillers

ответ

1

Вы успешно установить значение здесь:

function getitemIDbyProductID_success(total_percentage) { 
    itemID = total_percentage; 
    alert(total_percentage +"fds"+itemID); 
} 

Но тогда, в коде, который называет это, вы успешно установить его снова:

itemID=callback(value) 

Так как ваш getitemIDbyProductID_success не возвращает ничего, возвращаемое значение undefined , Поэтому в основном вы снимаете itemIDсразу после.

Просто вызовите функцию обратного вызова, не использовать его (не сохранившийся) возвращаемое значение:

callback(value); 

Кроме, это не будет делать то, что вы думаете:

getitemIDbyProductID(productId,getitemIDbyProductID_success);    
alert(itemID + "itemgeted"); 

Поскольку getitemIDbyProductID выполняет операцию асинхронного, . Даже если исправленные ошибки исправлены, эта ошибка сохраняется. И этот является дубликатом очень популярный вопрос (с ответами гораздо лучше, чем я могу предоставить) here.

0

Вы можете сделать что-то вроде этого:

getitemIDbyProductID(productId,function(val){ 
    itemID = val; 
    alert(itemID + "itemgeted"); 
}); 

В принципе, вы должны ждать, прежде чем Itemid получает назначение правильного значения.

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