【发布时间】:2016-09-02 07:50:10
【问题描述】:
我有这段代码:
$.getJSON('http://myjsonurl', function(json){console.log(JSON.stringify(json.columns)); });
这会在控制台中返回我从 json 响应中需要的所有内容。我的目标是将这个值放入一个函数中,以便我可以在另一个地方调用它。 (例如:
"columns" : getColumns();
所以我正在制作这样的功能:
function getColumns() {
$.getJSON('http://myjsonurl', function(json){return JSON.stringify(json.columns); });
}
console.log(getColumns()); // and then call the function in the console log expecting to see the same result as before.
但我得到的只是未定义的。 为什么?
更新:
这就是我实现我想要的方式的方式。以下代码将根据带有数据和列的 json 响应重新启动数据表(数据表本身不支持的内容)。该代码将使用新的查询参数重新加载表格并包含按钮插件:
var theurl;
theurl = "http://myjson.json";
function updateQueryStringParameternondt(key, value) {
var table = $('#datatable-buttons').DataTable();
var ajaxurl = theurl;
var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
var separator = ajaxurl.indexOf('?') !== -1 ? "&" : "?";
if (ajaxurl.match(re)) {
console.log( ajaxurl.replace(re, '$1' + key + "=" + value + '$2'));
theurl = ajaxurl.replace(re, '$1' + key + "=" + value + '$2');
table.destroy();
TableManageButtons.init();
}
else {
console.log( ajaxurl + separator + key + "=" + value);
theurl = ajaxurl + separator + key + "=" + value ;
table.destroy();
TableManageButtons.init();
}
}
TableManageButtons.init();
var handleDataTableButtons = function() {
0 !== $("#datatable-buttons").length &&
$.ajax( {
url:theurl,
dataType: 'json',
success: function ( json ) {
$("#datatable-buttons").DataTable({
"data" : json.data,
"columns": json.columns,
dom: "Bfrtip",
buttons: [{
extend: "copy",
className: "btn-sm"
}, {
extend: "csv",
className: "btn-sm"
}, {
extend: "excel",
className: "btn-sm"
}, {
extend: "pdf",
className: "btn-sm"
}, {
extend: "print",
className: "btn-sm"
}],
responsive: !0
});
}
} );
},
TableManageButtons = function() {
"use strict";
return {
init: function() {
handleDataTableButtons();
}
};
}();
【问题讨论】:
-
function getColumns() { return $.getJSON('myjsonurl', function(json){return JSON.stringify(json.columns); }); }
-
@Ioannis Kokkinis 您应该从 $.getJSON 方法返回处理程序的响应以及 Promise 并处理它。我会提供一个简单的解释来解释自己。
-
getColumns("$('#datatable-buttons').DataTable().ajax.url").always(function (response) { thecolumns = response;});行将异步运行,因此不会设置thecolumns变量的值。异步的意思是JavaScript会运行所有代码直到结束,然后会运行异步“标记”的代码,大致解释一下。所以试着把你所有的数据表实例化逻辑放在回调中。
标签: javascript jquery json datatables stringify