Javascript Jquery AJAX响应变量为JSON。
我有两个功能。第一个设置一个变量,然后第二个获取第一个函数所需的信息。我首先遇到的问题是,在ajax响应发生之前,所有内容都已返回。基本上,我需要做的是获取一个JSON对象并将其设置为变量,然后使用该对象的某些方面并将它们附加到项中。这是我所拥有的Javascript Jquery AJAX响应变量为JSON。,javascript,jquery,ajax,json,Javascript,Jquery,Ajax,Json,我有两个功能。第一个设置一个变量,然后第二个获取第一个函数所需的信息。我首先遇到的问题是,在ajax响应发生之前,所有内容都已返回。基本上,我需要做的是获取一个JSON对象并将其设置为变量,然后使用该对象的某些方面并将它们附加到项中。这是我所拥有的 $(document).ready(function(){ $('#youtube-url').blur(function() { $info = youtubeInfo($('#
$(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;
};
$(文档).ready(函数(){
$('#youtube url').blur(函数(){
$info=youtubeInfo($('#youtube url').val());
console.log($info);
如果($info.html){
//警报($info.缩略图\u url);
//$('preview_video_thumb').attr('src',$info.thumbnail_url);
}
});
});
函数youtubeInfo(url){
var odata=“”;
var result=jQuery.ajax({
url:“”,
键入:“POST”,
数据类型:“json”,
async:false,
数据:{url:url},
完成:功能(xhr、textStatus){
},
成功:函数(数据、文本状态、xhr){
返回数据;
},
错误:函数(xhr、textStatus、errorshown){
//发生错误时调用
}
}).responseText;
返回结果;
};
如果我从成功回调中返回“data”对象,它将返回空白。如果按原样执行,AJAX调用的responseText是一个字符串,而不是JSON。有什么想法吗?我基本上需要将第一个函数中的$info变量设置为第二个函数的AJAX响应(JSON)。删除
。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);
}
});
});
您在success函数中的
return data
语句未按预期执行。它实际上不是从ajax调用返回,而是从success函数返回。你可能想要的是这样的:
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;
};
函数youtubeInfo(url){
var odata=“”;
var result=jQuery.ajax({
url:“”,
键入:“POST”,
数据类型:“json”,
async:false,
数据:{url:url},
完成:功能(xhr、textStatus){
},
成功:函数(数据、文本状态、xhr){
odata=数据;
},
错误:函数(xhr、textStatus、errorshown){
//发生错误时调用
}
});
返回odata;
};
这在设置之前仍将返回odata
。不应该返回,因为OP正在设置为async tofalse@Mathletics不,它将在设置后返回,async:false
Wow-man,就是这样!你介意解释一下为什么会这样吗?我以前从未见过done函数。它可以工作,因为jQuery ajax方法实现了延迟对象接口,其中包括四种方法:done
、fail
、始终
,以及then
。还有其他一些,但这四个是最重要的<代码>完成和失败
是显而易见的,始终
将始终被调用(我猜也是显而易见的),然后允许您同时定义完成
和失败
。然后(donehandler,failhandler)
@GThompson——如果您使用的是.done()