字符串问题的javascript赋值

javascript assignment of a string issue

本文关键字:赋值 javascript 问题 字符串      更新时间:2023-09-26

我在将字符串分配给变量然后返回时遇到问题。这听起来很简单,应该很简单,但我完全不知道为什么会发生这种情况。我的代码:

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;
}

我在相应的行中强调了这个问题。任何帮助都会得到通知。

建议您通读评论中的链接文章。

你需要的是这样的东西:

function drawpills(callback){
    var picid;
    $.post('js/fetchdata.php', function(data){
        var pcid = data; // process pcid here
        callback(pcid);
     });
}

问题在于AJAX的异步行为。当AJAX响应被发送时,无论调用是否已经完成执行,它都会转移到下一条语句。你现在可以做两件事中的一件。您可以使AJAX同步,这可能会中断页面上事件的时间,也可以创建一个回调,以便在AJAX调用完全完成时执行。

$post回调是异步函数,因此:

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;
}