将变量从子函数传递给父函数javascript的更好方法

时间:2011-11-29 14:07:58

标签: javascript jquery

例如

function getResult(field) {
    $.ajaxSetup ({cache: false, async: false});
    $.get("api.php?field="+field, function(i) {
        result = i;
    });
    return result;
};

问题在于结果变得全球化。如果我var result = i;,则父函数(getResult)无法看到变量result

有一种聪明的方法吗?

我发布的代码工作正常。我已经将我的AJAX调用设置为同步完成。

4 个答案:

答案 0 :(得分:6)

function doIt(arr) {
  var result = [];
  $.each(arr, function (y_u_key_jQuery_y_u_no_fix_api, value) {
    result.push(value);
  });
  return result;
}

通常你想要做的是在外部函数中创建一个局部变量,内部函数通过闭包范围操作

答案 1 :(得分:1)

让我们假设你的AJAX调用是同步的。你可以试试这个:

function getResult(field) {
  var result;
  $.get("api.php?field="+field, function(i) {
    result = i;
  });

  return result;
 };

这样,变量result就不再是全局的了。

答案 2 :(得分:0)

$.get()是异步调用。试图从中返回一些东西不会像你想象的那样起作用。如果你想对结果做一些事情,你应该在成功的回调中做到这一点。

Here是关于get的文档。

答案 3 :(得分:0)

您实际上无法从异步调用中返回值,而是必须依赖响应将由响应到达时调用的回调函数处理。

function getResult(field, callback) {
    $.get("api.php?field=" + field, callback);
};

<强> USAGE

getResult("someFieldName", function(data) {
    var result = data;
    // do something with the response from server
});