AJAX请求不会更改div中的文本

时间:2015-06-15 23:44:53

标签: javascript jquery ajax

我目前正在执行一项任务,包括使用php从文件中获取信息并使用AJAX返回它。当我使用警报对此进行测试时,数据将被发送,但出于某种原因,该行:

param.html(str);

不会更改div中的文字...

这是我的功能:

function updateChat(param) {
    var dataString = 'update=true';
    var str = '';
    $.ajax({
        type: "POST",
        url: "inc/chat.php",
        data: dataString,
        success: function(data) {
            str = data;
        }
    });
    param.html(str);
}

以下是我调用方法的方法:

setTimeout(function() {
    updateChat('#chatbox');
}, 1000);

2 个答案:

答案 0 :(得分:5)

由于您正在执行异步请求str,因此在ajax请求完成并调用成功处理程序之前不会设置param.html(str)。将function updateChat(param) { var dataString = 'update=true'; var str = ''; $.ajax({ type: "POST", url: "inc/chat.php", data: dataString, success: function(data) { param.html(data); } }); } 移到ajax成功处理程序中,然后它将更新div中的文本。

setTimeout(function() {
    updateChat('#chatbox'); //<----
}, 1000);

更改此

setTimeout(function() {
    updateChat($('#chatbox'));
}, 1000);

{{1}}

答案 1 :(得分:1)

问题出现是因为javascript在Ajax中使用异步调用。在你的情况下,分配param.html(str)的行是在str因服务器调用延迟而改变之前执行的。

function updateChat(param) {
    var dataString = 'update=true';
    var str = '';
    $.ajax({
        type: "POST",
        url: "inc/chat.php",
        data: dataString,
        success: function(data) {
            str = data; ---> then it's assigned
        }
    });
    param.html(str);  ---> this is executed first
}

将param.html赋值移到Ajax调用的success函数中。