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 у тебя на сервере отдельным файлом это тоже очень плохой стиль