【问题标题】:Take value from function [duplicate]从函数中获取价值[重复]
【发布时间】:2016-08-17 16:59:49
【问题描述】:

我学习 JS 几个月了,我写过简单的脚本。但是现在我遇到了一个我无法在 Google 中制定的问题。我有程序

var iWantValueFromAjax = "im empty";
$.ajax({
  type: "POST",
  dataType:'jsonp',
  url: "https://api.novaposhta.ua/v2.0/json/",
  data: {
    "modelName": "Address",
    "calledMethod": "getCities",
    "methodProperties":{}, 
    "apiKey": "6f94a6391cb5134ee68ddb7924de2a3d"},
    success: function(msg){
      iWantValueFromAjax = msg.data.map(function(e) {
        return (e.Description);
      });
    },
  }
);
console.log(iWantValueFromAjax);

我看到什么值变量“iWantValueFromAjax”没有改变。我怀疑我不了解问题 jquery 的范围。可能是我不了解整个想法范围,哈哈。

【问题讨论】:

  • 哇,不要用return-obj作为变量名,很混乱
  • 其实破折号作为变量名是无效的;这段代码根本不会运行,如此处所示。
  • 你返回的东西是:return varName;
  • 不清楚您的问题是什么。但是,如果你真的试图在 $.ajax 调用的成功回调中返回一些东西,你不能使用返回的值什么都不做,你不应该试图在这样的函数中返回任何东西 - 或任何异步回调函数-。您可以使用函数内部的代码来操作更大范围的变量或进行函数调用,但您不能从其返回值中获利。
  • @Sergeon,所以我必须使用全局变量?

标签: javascript jquery variables scope


【解决方案1】:

您需要了解异步请求的性质。

异步意味着:您正在启动一些动作,该动作(一段时间后)将改变状态并调用回调函数。

但是:在您启动异步操作后,正常的程序流程将继续。

什么意思?

  1. 代码console.log(iWantValueFromAjax) 将在$.ajax() 被调用后立即执行。所以它肯定会在请求回调被调用之前运行
  2. 依赖于异步调用结果的每个后续操作都必须在回调中执行或从该回调中调用(例如,通过调用函数)。特别是你不能从异步回调中返回任何东西(技术上你可以,但返回值最终会“无处”)

【讨论】:

  • 是的,你是对的。哦,现在这看起来很简单。
猜你喜欢
  • 2023-03-18
  • 2017-11-01
  • 2012-09-19
  • 1970-01-01
  • 2016-01-10
  • 2017-10-19
  • 2016-01-26
  • 2019-03-25
相关资源
最近更新 更多