javascript関数内で$ .postを使用すると、変数に値を割り当てることができませんか?
質問
関数内で$ .postを使用して結果を取得し、$。postコールバックの結果に基づいて関数をtrueまたはfalseで返します。ただし、親関数のreturnイベントの後、コールバックが発生するようです。
これは、ret変数が常に未定義である現在のコードですが、$。postコールバック内でalert()すると、正しい結果が返されます。
function elementExists(key, type, path, appid, pid){
var ret;
$.post('?do=elExists', {key: key, type: type, path: path, appid: appid, pid: pid},function(data){
ret = data;
});
alert(ret);
return ret;
}
解決
あなたが発見したように、投稿は非同期的に行われます。同期する場合は、 ajax <を使用する必要があります。 / code>
メソッドを使用して、 async
パラメータをfalseに設定します。ただし、ポストが非同期であることを認識し、コールバックによって実行されるアクションがポストを呼び出すメソッドに依存しないようにコードをビルドする方が良いでしょう。明らかに、あなたは本当にアラート以外の何かをしたいのですが、これをリファクタリングする方法をアドバイスするのは難しいことを知らずに。
編集:あなたのコードが何かが存在するかどうかを確認していることを理解していますが、目的のためにそれを確認しています。目的がわかっていれば、メソッドをリファクタリングできるように、コールバックでそれを達成する方法を推奨できるかもしれません。
他のヒント
function elementExists(key, type, path, appid, pid){
$.post('?do=elExists', {key: key, type: type, path: path, appid: appid, pid: pid},function(data){
alert(data);
});
}
function(data)はコールバック(非同期)であり、そのような値を返すことはできません。
そのコールバックは、ページの呼び出しが完了するまで呼び出されませんが、&quot; return ret&quot; $ .postを呼び出した直後に実行されています
syncronous set async:falseに設定する場合
ドキュメントを参照してください http://docs.jquery.com/Ajax/jQuery.post#urldatacallbacktype
問題は、コードが非同期に実行されることです。つまり、alert(ret)はret = dataの前に実際に呼び出されます。これはAjaxリクエストが完了すると発生します。
async オプション、またはコードを再設計します。