Как большинство ответов упоминает, что вы делаете асинхронный вызов, но на самом деле это не причина. Таким образом, JavaScript является однопоточным, только на мысли можно сделать за раз.
Итак, сначала вы вызываете свою функцию, и эта функция помещается в стек контекста выполнения. Эта функция будет выполнена до того, как любая другая функция, которая будет добавлена в стек, может быть выполнена.В этой функции вы делаете свой вызов ajax, и при успешном выполнении функция успеха будет помещена в стек контекста выполнения. Таким образом, эта функция никогда не вызывается до naviSet
. Поскольку alert1 выполняется в функции naviSet
, он будет вызван первым.
А ваш второй вопрос:
С вашей функции я думаю, что вы верите, когда $.ajax()
возвращается true
, ваш Ajax вызов был успешным и pageCount
был установлен в данные. Но это не так. $.ajax
не возвращает true, но значение trueeth $
. Его функция возвращает ссылку на главный объект jquery, поэтому вы можете цеплять вызовы функций.
функция NaViSet()
{
//you create a new var which is undefined
var pageCount;
// return $ which is a truethy in JavaScript, but it does not mean the ajax call was successful
if($.ajax({
type: "POST",
url: "http://localhost/mywebsite/wp-content/themes/twentyeleven/more-projects.php",
success:function(data)
{
// now you in the context of your success function
// and set the value of your variable to data
pageCount = data;
alert(pageCount); //alert 1
return true;
},
error:function()
{
$("#direction").html("Unable to load projects").show();
return false;
}
}))
//here you are still in the context of your naviSet function where pageCount is undefined
alert(pageCount); //alert 2
}
сог его asnc вызова Калима .. :) –