首页 > 解决方案 > 更改同步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());
  });

提前谢谢了!

标签: jqueryajax

解决方案


您的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而不是函数执行的结果。


推荐阅读