我有两个功能。第一个设置变量,然后第二个获取第一个函数所需的信息。我第一次遇到的问题是,在ajax响应发生之前,所有内容都已返回。基本上我需要做的是获取一个JSON对象并将其设置为一个变量,然后使用该对象的某些方面并将它们附加到项目。这就是我的......
$(document).ready(function(){
$('#youtube-url').blur(function() {
$info = youtubeInfo($('#youtube-url').val());
console.log($info);
if($info.html){
//alert($info.thumbnail_url);
//$('#preview_video_thumb').attr('src', $info.thumbnail_url);
}
});
});
function youtubeInfo(url){
var odata = '';
var result = jQuery.ajax({
url: '<? echo base_url("videos/getOembed") ?>',
type: 'POST',
dataType: 'json',
async: false,
data: {url: url},
complete: function(xhr, textStatus) {
},
success: function(data, textStatus, xhr) {
return data;
},
error: function(xhr, textStatus, errorThrown) {
//called when there is an error
}
}).responseText;
return result;
};
如果我从成功回调中返回'data'对象,则返回空白。如果我这样做,AJAX调用的responseText是一个字符串而不是JSON。有任何想法吗?我基本上需要将第一个函数中的$ info变量设置为第二个函数的AJAX响应(JSON)。
答案 0 :(得分:3)
删除.responseText
并使用:
$('#youtube-url').blur(function() {
youtubeInfo($('#youtube-url').val()).done(function($info){
if($info.html){
//alert($info.thumbnail_url);
//$('#preview_video_thumb').attr('src', $info.thumbnail_url);
}
});
});
答案 1 :(得分:0)
成功函数中的return data
语句没有按照您的意图执行。它实际上并没有退出ajax调用,而是返回成功函数。您可能想要的是这样的事情:
function youtubeInfo(url){
var odata = '';
var result = jQuery.ajax({
url: '<? echo base_url("videos/getOembed") ?>',
type: 'POST',
dataType: 'json',
async: false,
data: {url: url},
complete: function(xhr, textStatus) {
},
success: function(data, textStatus, xhr) {
odata = data;
},
error: function(xhr, textStatus, errorThrown) {
//called when there is an error
}
});
return odata;
};