2013-08-11 3 views
1

Мне кажется, что функция .text() не работает должным образом в моей функции..text() работает только один раз

Время от времени, страница будет отображаться правильно, но большую часть времени текст не изменяется. Страница начинается с тега <p>, отображающего «Ожидание», тогда начальный .text() в beforeSend: работает правильно, и текст изменяется на «Обработка запроса ...», однако с этого момента функция .text() не работает.

Я добавил в console.log с, чтобы увидеть, если переменная msg заселяется правильно, и это, но .text() до сих пор не меняя <p> тег во второй раз. Кажется, что во всех браузерах одинаково.

Это моя функция:

function sendrequest(first, last, email) { 
    var request = $.ajax({ 
     url:"/core/ajax/register.php", 
     type:"POST", 
     data: {uf:first,ul:last,ue:email}, 
     beforeSend: function(){ 
      forms.regFor.fadeOut(100, function(){ 
       $('p#msg').text('Processing request...'); 
      }); 
     } 
    }); 

    request.done(function(data){ 
     var msg; 

     if (data == 1){ 
      msg = "Thank you "+first+", your request has been sent."; 
      console.log('Registered successfully'); 
     }else if (data == 2){ 
      msg = "It appears that you have already signed up."; 
      console.log('Already signed up'); 
     }else{ 
      msg = "There has been an error."; 
      console.log('Error on submission'); 
     } 

     console.log(msg); 

     $('p#msg').text(msg); 
    }); 
} 

Я, наверное, пропустил что-то очень простое, просто не могу видеть, что это вообще, надеюсь, кто-то может.

+0

Я устал, что точно такой же результат. – Warren

+1

Если это работает иногда, а не в другое время, то я бы предположил, что у вас есть проблема с вашим аякс-вызовом. Возможно, вам нужно убедиться, что страница загружена, прежде чем пытаться изменить страницу? Если страница иногда загружается из кеша и, следовательно, загружается быстрее, она может работать, а затем делает ее доступной, но в других случаях она еще не готова, когда завершается вызов ajax. – jfriend00

+0

Что показывает консоль как возвращаемая из скрипта 'register.php'? – DevlshOne

ответ

3

Попробуйте удалить fadeOut в свой звонок beforeSend.

Вполне вероятно, что fadeOut не завершит работу до вызова AJAX. Таким образом, запускается ваш AJAX done, затем ваш fadeOut завершен, и ваш обратный вызов fadeout имеет место, уничтожая изменения AJAX done.

beforeSend: function(){ 
     $('p#msg').text('Processing request...'); 
    } 

Если вы чувствуете, сусла имеет FADEOUT, затем поставить вызов AJAX в FADEOUT обратного вызова.

forms.regFor.fadeOut(100, function(){ 
    var request = $.ajax({ 
     url:"/core/ajax/register.php", 
     type:"POST", 
     data: {uf:first,ul:last,ue:email}, 
     beforeSend: function(){ 
      $('p#msg').text('Processing request...'); 
     } 
    }); 
    request.done = // etc. 
}); 
+0

Это сработало отлично! Спасибо! – Warren

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