javascript - 当未包装在匿名函数中时,属性的行为有所不同

标签 javascript jquery ajax function

不太明白这个JS函数是如何获取数据的。这是我的代码的第一个变体:

function iReceived(msg) {
              console.log(msg.data);
          };
            var rest = $.ajax({
                   type: "POST",
                   dataType:'jsonp',
                   url: "https://api.novaposhta.ua/v2.0/json/",
                   data: {"modelName": "Address",
                        "calledMethod": "getCities",
                        "methodProperties":{}, 
                         "apiKey": "XXXXXXXXXXXXXXXXXXX"},
                success:  function(e) { iReceived(e) }, 

            });

函数iReceived打印它获得的数据。但在第二种变化中:

function iReceived(msg) {
              console.log(msg.data);
          };
            var rest = $.ajax({
                   type: "POST",
                   dataType:'jsonp',
                   url: "https://api.novaposhta.ua/v2.0/json/",
                   data: {"modelName": "Address",
                        "calledMethod": "getCities",
                        "methodProperties":{}, 
                         "apiKey": "XXXXXXXXXXXXXXXXXXX"},
                success:   iReceived(e) , 

            });

函数返回undefined 。请告诉我为什么这个变体以不同的方式工作。

最佳答案

在 JavaScript 中,您只需通过不带括号的名称引用函数即可将函数作为参数传递给其他函数。

因此您需要传递对成功回调的引用。如果您传递iReceived(),它会立即执行,而不是您所期望的。

第一个示例之所以有效,是因为您将一个匿名函数传递给了成功回调,该回调在请求完成后立即执行。当执行匿名函数时,它可以使用加载的数据运行您的函数。

有关此主题的进一步阅读

代码

function iReceived(msg) {
  console.log(msg.data);
};

var rest = $.ajax({
  type: "POST",
  dataType: 'jsonp',
  url: "https://api.novaposhta.ua/v2.0/json/",
  data: {
    "modelName": "Address",
    "calledMethod": "getCities",
    "methodProperties": {},
    "apiKey": "XXXXXXXXXXXXXXXXXXX"
  },
  success: iReceived,

});

关于javascript - 当未包装在匿名函数中时,属性的行为有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39026082/

相关文章:

javascript - 如何将 Rails 部分渲染到新的浏览器选项卡中

jquery - 瓷砖的 Safari float 或尺寸问题

jquery - 一点一点地加载页面

javascript - $.ajax 错误未捕获 SyntaxError : Unexpected token :

javascript - mobx 商店更改后更新选项卡导航器上的徽章

javascript - 随机化和排序 Div - Slick.JS

javascript - 如何使用 JSNetworkX 在实际节点之外获取标签?

javascript - Node : bad option: --experimental-worker

javascript - 如何在 jQuery 中包装一组可重复的元素?

javascript - ajax 调用后无法提醒 json 对象