我目前正在执行一项任务,包括使用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);
答案 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函数中。