这可能更像是一个范围问题.我正在尝试在$ .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) 在$ .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 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) 我知道之前已经问过这个问题,但我的变化与其他答案不符.
我有一个这种形式的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) jquery ×4
javascript ×2
ajax ×1
callback ×1
datatables ×1
json ×1
scope ×1
synchronous ×1
variables ×1