Показать сообщение отдельно
  #2 (permalink)  
Старый 03.01.2015, 18:58
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

return checkFieldName сработает раньше чем отработает асинхронный кэлбек в post

то есть
1) устанавливается check_field_name=false
2) отправляется запрос на сервер, но результат ещё не приходит и function(responseXML, check_field_name) не отрабатывает
3) срабатывает return check_field_name который всегда вернёт false, так как только false ты и установил в 02 строке
4) твоя программа отработает с результатом false полученный от функции checkFieldName
5) наконец то придёт ответ от сервера, и function(responseXML, check_field_name) установит настоящий результат, правда случится это когда уже всё закончилось и результат уже нахрен не нужен

Кстатии если ты в each перебераещь несколько result (хотя на мой взгляд это как то странно) то результат true будет только в случае если самый последний result будет содержать 1, в противном случае всегда false. у

ещё один косяк в том что check_field_name в строке 9 у тебя локальная переменная так как ты её объявил в заголовке функции. И даже если бы запрос был синхронным то результат бы всё равно не мог выйти за пределы функции так как помещается в локальную переменную функции. Иными словами результат работы checkFieldName по прежнему всегда был бы false

и ещё один косяк в том что check_field_name во 2й строке у тебя глобальная переменная, глобальные переменные зло

Более менее правильый вариант выглядит как то так.

function checkFieldName(nm,callback){
   $.post("checkfieldName.php",{
         name: nm,
         dataType: 'xml'
      },
      function(responseXML){
         var check_field_name = false;
         $(responseXML).find("result").each(function() {
    	      check_field_name = $(this).find('status').text()==1)?true:false; 
         });
         callback(check_field_name)
      }
   );
}

checkFieldName(абгдзюзю,function(result){
     alert('результат проверки '+result)
})


P.S. То что checkfieldName.php у тебя на сервере отдельным файлом это тоже очень плохой стиль
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 03.01.2015 в 20:29.
Ответить с цитированием