这是AJAX的工作方式(异步)。
我有函数:
function get_playlist(){
var result = jQuery.ajax({
url: '<?php echo admin_url('admin-ajax.php'); ?>',
type: 'post',
dataType: 'json',
data: {
action: 'getrandommp3',
nonce:'<?php echo wp_create_nonce( 'randmp3' ); ?>'
},
success: function(response) {
console.log(response); // All OK!
window.response = response;
var customvar = response;
return response;
}
});
console.log(window.response); // undefined
console.log(result.responseText); //undefined
console.log(customvar); //undefined
return window.response; // returning undefined
}
我需要从函数返回json变量。success: function(response) {
内部响应有需要的内容。但在Jquery.ajax
之外,我有问题。。。
jquery mp3播放器需要这个代码。。。
var playlist = get_playlist();
var myPlaylist = new jPlayerPlaylist(cssSelector, playlist, options);
myPlaylist.shuffle(true, true);
谢谢你的帮助!
success
事件处理程序之外的console.log
语句在返回响应之前执行(因此尚未向window.response
分配任何内容)。将依赖AJAX响应的代码放入success
事件处理程序中。
或者,您可以使请求同步,但这通常不是您想要的,因为它可以锁定浏览器,直到返回响应。
更新(请参阅评论并编辑以提出问题)
正如我之前提到的,您需要将所有依赖AJAX响应的代码放入就绪事件处理程序中:
function get_playlist(){
var result = jQuery.ajax({
//Other AJAX options removed
success: function(response) {
var myPlaylist = new jPlayerPlaylist(cssSelector, response, options);
myPlaylist.shuffle(true, true);
}
});
}