相关疑难解决方法(0)

在$ .getJSON函数期间设置的变量只能在函数内访问

这可能更像是一个范围问题.我正在尝试在$ .getJSON函数中设置JSON对象,但我需要能够在回调之外使用该对象.

var jsonIssues = {};  // declare json variable

$.getJSON("url", function(data) {
    jsonIssues = data.Issues;
});

// jsonIssues not accessible here
Run Code Online (Sandbox Code Playgroud)

在另一篇文章中提到了类似这样的问题,并且一致认为我需要在JSON对象中做的任何事情都需要在回调函数中完成,并且不能在其他任何地方访问.我真的没办法在$ .getJSON回调之外继续访问/操作那个JSON对象吗?如何返回变量或设置全局?

我很感激任何帮助.这似乎不对......

更新:

尝试将$ .ajax()异步设置设置为false,并运行相同的代码,没有运气.我试过的代码如下:

var jsonIssues = {};  // declare json variable

$.ajax({ async: false });

$.getJSON("url", function(data) {
    jsonIssues = data.Issues;
});

// jsonIssues still not accessible here
Run Code Online (Sandbox Code Playgroud)

另外,我有几个响应,全局变量应该可以正常工作.我应该澄清所有这些代码都在其中$(document).ready(function() {.要设置全局变量,我应该在document.ready之前声明它吗?因此:

var jsonIssues = {};

$(document).ready(function() {

  var jsonIssues = {};  // declare json variable

  $.getJSON("url", function(data) {
      jsonIssues = data.Issues;
  });

  // now …
Run Code Online (Sandbox Code Playgroud)

javascript variables jquery scope callback

45
推荐指数
3
解决办法
6万
查看次数

我怎么能让$ .each等到.trigger('click')事件加载所有东西?

在$ .getJSON成功函数中,我首先触发另一个元素的click事件:

$('#' + data[0].ID).trigger('click');
Run Code Online (Sandbox Code Playgroud)

触发的click事件有自己的$ .getJSON方法将一堆数据加载到div中.触发事件后的下一行:

$.each(data[0].ListEntries, function (key, val) {
        //this relies on the triggered click event 
        //having completely loaded all data!
}
Run Code Online (Sandbox Code Playgroud)

起初$ .each似乎没有做任何事情,但我在触发事件后立即添加了警报.响应警报后,$ .each中的代码显示了它应该是什么.

我猜测$ .each在点击事件完成加载数据之前正在运行.

setTimeout暂停足够长的时间以使click事件加载数据,但我宁愿不设置任意时间:

setTimeout(function() { 
    $.each(data[0].ListEntries, function (key, val) {
        //this relies on the triggered click event 
        //having completely loaded all data!
    }
}, 1000);
Run Code Online (Sandbox Code Playgroud)

我也试过$ .when和$ .then无济于事(尽管在$ .each里面添加警报,然后在$.然后为$ .each工作创建延迟):

$.when($('#' + data[0].ID).trigger('click')).then(function () {
    $.each(data[0].ListEntries, function (key, val) {
        //this relies on the triggered click event 
        //having completely loaded all data! …
Run Code Online (Sandbox Code Playgroud)

jquery

8
推荐指数
2
解决办法
1万
查看次数

getJSON不尊重异步:false

我在下面有这个代码,它应该返回调用的结果.我需要同步这样做,以便我知道一切都很好,但它似乎不起作用.我究竟做错了什么?

/* jQuery library:
 * http://code.jquery.com/jquery-1.9.1.min.js
 */
function getJSON(url){
    var result;
    $.getJSON(url, { async: false, success: function(data) {
        result = data;
        alert(data); // **Edit**: also undefined
    }});
    alert(result); // undefined
    return result;
}
Run Code Online (Sandbox Code Playgroud)

jquery synchronous

2
推荐指数
1
解决办法
1万
查看次数

数据表 - 动态列

我知道之前已经问过这个问题,但我的变化与其他答案不符.

我有一个这种形式的json数据源:

    {
      "columns":[
          {"title":"Store Number","data":"StoreNbr"},
          {"title":"Store Name","data":"StoreName"},
          {"title":"2016-01-01","data":"2016-01-01"},
          {"title":"2016-01-02","data":"2016-01-02"}
      ],
      "data":[
          {"2016-01-01":"51","StoreNbr":"1","StoreName":"Store 1","2016-01-02":"52"}
      ]
  }
Run Code Online (Sandbox Code Playgroud)

我正在加载这样的数据:

$("#datatable").DataTable({
            "ajax": {
            "url": "http://myjsonurl-that-produces-above-response",
           "dataSrc": "data"
        },

    "columns": [
       {"title":"Store Number","data":"StoreNbr"},
       {"title":"Store Name","data":"StoreName"},
       {"title":"2016-01-01","data":"2016-01-01"},
       {"title":"2016-01-02","data":"2016-01-02"},
     ],   
     dom: "Bfrtip",
    "bProcessing": true,
    "bServerSide" : true
});
Run Code Online (Sandbox Code Playgroud)

以上工作完美无瑕.我需要的是动态加载列,如下所示:

"columns": $.getJSON($('#datatable').DataTable().ajax.url(), 
           function(json){
              return (JSON.stringify(json.columns));  
           });
Run Code Online (Sandbox Code Playgroud)

我得到的只是一个aDataSource错误.如果我在代码中的任何其他位置运行.getJSON,我会获得预期的响应,即我需要的响应.有任何想法吗?

我想让它工作,因为它最好是因为我的数据源不断变化基于我应用的影响json源,数据集等的过滤器.

更新:

表的初始化方式:

<script type="text/javascript"> 
          TableManageButtons.init();

TableManageButtons = function () {"use strict"; return { init: function () { handleDataTableButtons()  } }}();

var handleDataTableButtons = function () {
    "use strict";
    0 …
Run Code Online (Sandbox Code Playgroud)

javascript ajax jquery json datatables

2
推荐指数
1
解决办法
7497
查看次数

标签 统计

jquery ×4

javascript ×2

ajax ×1

callback ×1

datatables ×1

json ×1

scope ×1

synchronous ×1

variables ×1