Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery AJAX响应变量为JSON。_Javascript_Jquery_Ajax_Json - Fatal编程技术网

Javascript Jquery 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($('#

我有两个功能。第一个设置一个变量,然后第二个获取第一个函数所需的信息。我首先遇到的问题是,在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;

            };
$(文档).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()