我正在使用jquery和php以及WordPress来访问mysql数据库中的数据。
我设法检索了那些数据,但希望jquery等到所有数据都被检索出来。
以下是相关的代码段。
两个警报命令都不显示任何内容,因为数据尚未完成加载。
如何重新编码?
jQuery(document).ready(function ($) {
load_qs('foo');
alert($(".all-qa-free").val());
//////////////////////////////////////////////////////////////////////////
function load_qs(data) {
var data = {
action: 'load_question_set',
async: false,
cache: false,
qset_id: data
};
$.post(the_ajax_script.ajaxurl, data, function (response) {
var mydb_data = $.parseJSON(response);
$("#all-qa").val(mydb_data.qa);
alert($(".all-qa-free").val());
return;
});
}
});
答案 0 :(得分:0)
Ajax调用是异步的,而JS是同步执行的。 jQuery / JavaScript启动ajax调用并立即进入下一行执行。它不会等待来自服务器的响应。
解决方案: 在回调函数本身中执行您想要对服务器响应执行的所有处理。在您的情况下,在下面的函数中:
function(response) {
var mydb_data = $.parseJSON(response);
$("#all-qa").val(mydb_data.qa);
alert ($(".all-qa-free").val());
return;
}
否则你将继续面对这个问题。尝试在回调函数中添加警报。它肯定会奏效。
还有一件事,你在id“#all-qa”中输入值并从“.all-qa-free”获取数据,请检查你是否正确行事。
- HappyCoding
答案 1 :(得分:0)
您应该在ajax电话中设置async: true
。
将async设置为false意味着您调用的语句必须在调用函数中的下一个语句之前完成。 如果设置async:true,则该语句将开始执行,并且无论异步语句是否已完成,都将调用next语句。