更改同步Ajax时未定义的功能

时间:2019-06-21 16:28:07

标签: jquery ajax

我正在转换一个用于将同步ajax请求加载到getDesign.php的函数。 getDesign.php请求一些图像,然后使用loadImages函数将它们显示在屏幕上。

在我进行更改之前:

      $d.ajax({
            type: "POST",
            url: "getDesign.php",
            data: {design : 1234,
                   type: ""
                    },      
            dataType: "json",
            async: false,
            success: function(data) {               
             }
      });

loadImages() { // loads images }

我现在已尝试更改此设置,因为我了解不赞成使用异步部分。逻辑应该仍然相同-即调用ajax函数,然后在返回某些内容后,调用loadImages函数。我无法弄清楚为什么加载脚本时函数“ getDesign”出现为未定义状态。请有人可以看看我在做什么错吗?

var $d = jQuery.noConflict();

function loadImages()
{
 // loads images
}

 $d(document).ready(function() {

      var getDesign = function() {  
          $d.ajax({
                type: "POST",
                url: "getDesign.php",
                data: {design : 1234,
                       type: ""
                        },      
                dataType: "json",
                success: function(data) {               
                 }
          });
      };      

      getDesign().done(loadImages());
  });

非常感谢!

1 个答案:

答案 0 :(得分:1)

您的 getDesign 不返回承诺,最好返回未定义。添加收益就足够了:

var $d = jQuery.noConflict();

function loadImages()
{
    // loads images
}

$d(document).ready(function() {

    var getDesign = function() {
        return $d.ajax({   // <-----  RETURN   HERE
            type: "POST",
            url: "getDesign.php",
            data: {design : 1234,
                type: ""
            },
            dataType: "json",
            success: function(data) {
            }
        });
    };

    getDesign().done(loadImages);
});

此行中还有另一个错误:

getDesign().done(loadImages());
                           ^^

将其更改为:

getDesign().done(loadImages);

.done()要求 doneCallbacks ,而不是执行函数的结果。