ほとんどの回答には、非同期呼び出しを行うことが記載されていますが、それは実際の理由ではありません。したがって、JavaScriptはシングルスレッドであり、思考は時間ごとにしか実行できません。
まず、関数を呼び出すと、この関数は実行コンテキストスタックを作成します。この関数は、スタックに追加される他の関数を実行する前に実行されます。この関数では、ajax呼び出しを行い、成功するとsuccess関数が実行コンテキストスタックに置かれます。したがって、この関数はnaviSet
の前に決して呼び出すことはできません。 alarm1はnaviSet
関数で行われるので、最初に呼び出されます。
そして、あなたの2番目の質問に:私はあなたが信じていると思いますあなたの関数から
、$.ajax()
はtrue
を返し、あなたのAJAX呼び出しが成功したとpageCount
は、データに設定しました。しかし、そうではありません。 $.ajax
はtrueを返しますが、truethyの値は$
です。メインjqueryオブジェクトへの参照を返す関数で、関数呼び出しを連鎖させることができます。
関数naviSet()そのasncコールkaleemだって
{
//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
}
... :) –