2

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

            };

如果我从成功回调中返回“数据”对象,它将返回空白。如果我这样做,AJAX 调用的 responseText 是一个字符串而不是 JSON。有任何想法吗?我基本上需要将第一个函数中的 $info 变量设置为第二个函数的 AJAX 响应(JSON)。

4

2 回答 2

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);
        }
    });
});
于 2012-05-29T20:01:04.733 回答
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;

        };
于 2012-05-29T20:02:34.463 回答