2012-05-26 5 views
4

Я хочу вернуться false из $.ajax когда success завершена:успех Ajax: {вернуться ложным;}

$.ajax({ 
    url: '' + $website_url + 'queries/voorraad_berekenen.php', 
    type: 'post', 
    data: { 
     aantal: $(this).parent('form').children('.quantity').val(), 
     item_number_1: $(this).parent('form').children('.item_number_1').val() 
    }, 
    success: function(result) { 
     return false; 
    } 
}); 

Это не работает. Есть ли работа?

+0

Вы имеете в виду вы хотите вернуть ложь от '$ .ajax' когда успех будет завершен? –

+0

Да, между функцией успеха есть скрипт, который проверяет несколько переменных и на основании этого я хочу вернуть false; –

+4

Вам нужно исследовать [обратные вызовы] (http://stackoverflow.com/questions/8549658/jquery-ajax-how-do-callbacks-work). Есть вопросы ** об этом. – Jivings

ответ

10

С вашего поста я предполагаю, что вы вызываете функцию, которая содержит $.ajax() и попробовать до return false. но вы не можете так поступать, потому что AJAX является асинхронным.

Это лучше вызвать функцию из функции Ajax успеха, как следующее:

$.ajax({ 
    url: '' + $website_url + 'queries/voorraad_berekenen.php', 
    type: 'post', 
    data: { 
     aantal: $(this).parent('form').children('.quantity').val(), 
     item_number_1: $(this).parent('form').children('.item_number_1').val() 
    }, 
    success: function(result) { 
     var returned = true; 
     if(some_condition_not_satisfied) { 
      returned = false; 
     } else { 

     } 
     // call a function 
     calledFromAjaxSuccess(returned); 
    } 
}); 

function calledFromAjaxSuccess(result) { 
    if(result) { 
    alert('TRUE'); 
    } else { 
    alert('FALSE'); 
    } 
} 
+0

Единственное, что я хочу, это то, что форма (форма оплаты в этом случае) не выполняет почту на странице paymend paypal, когда количество меньше, чем товарный запас, и когда это число. Возможно, у кого-то есть лучшая идея для использования в функции успеха. Что-то вроде abborting представления формы –

+0

@thecodeparadox: Даже если вызов AJAX 'async: false' не позволяет мне возвращать false,' в функции 'success'. Я создал отдельную функцию, которая возвращает false и называет ее в функции «success» безрезультатно. Есть идеи? – khaverim

+0

Это в основном объяснение ответа @thecodeparadox. http://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/ – yesfabime

1

Может быть, вы могли бы попробовать что-то вроде этого (значения 1 и 0 следует изменить на те, которые вы используете):

success: function(result){ 
if(result === '1'){ 
// do something 
} 
else 
    return false; 
} 
+0

Уже пробовал, что проблема в том, что она просто не работает, когда «return false»; находится между «success: function». Иначе это уже сработало бы –

+3

Здесь все еще не имеет смысла «возвращаться». – pimvdb

0

просто использовать asunc лжи он может работать нормально я осуществил подобный только

просто попробуйте

$.ajax({ 
    url: '' + $website_url + 'queries/voorraad_berekenen.php', 
    type: 'post', 
    data: { 
     aantal: $(this).parent('form').children('.quantity').val(), 
     item_number_1: $(this).parent('form').children('.item_number_1').val() 
    }, 
    async: false, //=>>>>>>>>>>> here >>>>>>>>>>> 
    success: function(result) { 
     return false; 
    } 
}); 

он отлично работает, попробуйте один раз

0

Я сталкиваюсь с этой проблемой. то я нашел фактическое решение. использовать асинхронные: ложь, внутри АЯКС вызова

function thisisavailavailusername(uname){ 
var dataString = 'username='+ uname.value; 
var trueorfalse = false; 
$.ajax({ 
    type: "post", 
    url: "/BloodBook/checkavailableusername", 
    data: dataString, 
    cache: false, 
    async : false, //user this then everything ok 
    success: function(html){ 
     if(html=="true"){ 
      $('#validusername').html('Available'); 
      trueorfalse = true; 
     }else{ 
      $('#validusername').html('Not Available'); 
      trueorfalse = false; 
     } 

    }, 
    error: function() { 
     alert("Something Wrong..."); 
    } 
}); 

return trueorfalse; 

}

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