使用jquery / json / getJSON创建一个辅助方法

|| 我想创建一个辅助方法,该方法可以包含在包含的javascript中并易于引用。 helper方法将jquery的.getJSON函数包装起来。
function doSomething(someThing) { 
  $.getJSON(theCoolestURLEver, {auth_key:\"barfoo\", id:someThing}, function(data) {
   console.log(data);
   return data;
  });
}
在我的普通HTML页面中,我想做的是:
<html>
<head>
   <script src=\"/_/js/myCoolFunctions.js\"></script>
</head>
<body>
<script>
  var someThing = \"foobar\";
  var data = doSomething(someThing);
  console.log(data);
</script>
</body>
</html>
最终结果是console.log在第二个代码块中以未定义的形式返回。我现在了解到,这与范围有关,或者页面已加载,并且
已邀请:
问题在于AJAX请求(例如“ 2”)是异步的。这意味着函数调用会在请求完成之前立即返回。您正在提供回调-接收数据后将运行此函数;这将是在“ 3”之后。 (此外,“ 4”仅设置处理程序的返回值,而不是“ 5”函数。) 我认为,最好的方法是创建自己的辅助方法:
$.getJSONAuth = function(url, data, success) {
    var authData =  {auth_key:\"barfoo\"};

    if ($.type(data) === \'function\') {
        success = data;
        data = authData;
    } else {
        data = $.extend({}, authData, data);
    }

    return $.ajax({
        url: url,
        type: \'GET\',
        dataType: \'json\',
        success: success,
        data: data
    });
}
您现在可以这样称呼它:
$.getJSONAuth(theCoolestURLEver, {id:someThing}, function(data) {
    console.log(data);
});
    
您的doSomething函数不会返回任何内容,而getJSON的回调函数会返回任何内容。 getJSON是异步执行的,因此您的doSomething函数在请求完成之前结束。您可以将函数传递给doSomething函数:
function doSomething(someThing, callback) { 
  $.getJSON(theCoolestURLEver, {auth_key:\"barfoo\", id:someThing}, function(data) {
   callback(data)
   return data;
  });
}
并这样称呼它:
<script>
  var someThing = \"foobar\";
  doSomething(someThing, function(data) { console.log(data); });
</script>
    
如果您这样做:
$.getJSON(theCoolestURLEver, {\'auth_key:\"barfoo\"\', \'id:someThing\'}, function(data)
请注意,将\'符号四舍五入为json键。我不知道,但是这就是我要做的。     

要回复问题请先登录注册