Jquery AJAX response JSON in variable.

Jquery AJAX response JSON in variable.

本文关键字:in variable JSON response AJAX Jquery      更新时间:2023-09-26

我有两个函数。第一个设置一个变量,然后第二个获取第一个函数所需的信息。我首先遇到的问题是,在 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 调用的响应文本是一个字符串而不是 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);
        }
    });
});

成功函数中的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;
        };