我在向变量分配字符串然后返回它时遇到问题。这听起来很简单,应该但是我完全迷失了为什么正在发生的事情正在发生。 我的代码:
function drawpills() {
var picid;
$.post('js/fetchdata.php', function (data) {
var clock = document.getElementById('clock');
clock.innerHTML = "<img src='images/clock/pill.png' alt='pill_image' id='pillpic" + data + "'/>";
picid = "pillpic" + data;
alert(picid); //if i run it here i get pillpic31 which is what i want
});
alert(picid); //if i run it here i get undefined which is not what i want and which is what is being returned
return picid;
}
我强调了相关问题的评论问题。任何帮助都是适用的。
答案 0 :(得分:2)
建议您阅读评论中的链接文章。
你需要的是这样的东西:
function drawpills(callback){
var picid;
$.post('js/fetchdata.php', function(data){
var pcid = data; // process pcid here
callback(pcid);
});
}
答案 1 :(得分:0)
问题是AJAX的异步行为。发送AJAX响应时,无论调用是否已完成执行,它都会移动到下一个语句。你现在可以做两件事之一。您可以使AJAX同步,这可能会破坏页面上事件的时间,或者您可以创建一个回调,以便在AJAX调用完成时执行。
答案 2 :(得分:0)
$。post callback是异步函数,所以:
function drawpills(){
var picid;
var callback = function(data){
var clock = document.getElementById('clock');
clock.innerHTML="<img src='images/clock/pill.png' alt='pill_image' id='pillpic"+data+"'/>";
picid="pillpic"+data;
alert(picid);
}
$.post('js/fetchdata.php', callback);
//picid is undefined,because callback is running until server response data.
//unless you using synchronous request
alert(picid);
return picid;
}