私は、コードのこの部分を持っている:リターンJson.Stringfy結果
$.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.
しかし、私が得るすべては未定義である なぜ
UPDATE:
これはどのようにあります次のコードは、データと列(データテーブルからネイティブにサポートされていないもの)を使用した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();
}
};
}();
関数のgetColumns(){ リターン$ .getJSON( 'HTTPのレスポンスを解決したい場合にのみ、約束を返すことができることを見ることができます:// myjsonurl '、function(json){JSON.stringify(json.columns);})を返します。 } –
@Ioannis Kokkinis $ .getJSONメソッドからのプロミスだけでなくハンドラの応答も返す必要があります。私は自分自身を説明するためにplunkを提供します。 – gdyrrahitis
'getColumns(" $ datetime-buttons ")。DataTable().Ajax.url")。常に(関数(レスポンス){thecolumns =レスポンス;}); '行は非同期に実行されるので、 'thecolumns'変数は設定されません。非同期とは、JavaScriptが終了するまですべてのコードを実行し、非同期の「マーク済み」コードを実行して、大まかに説明することを意味します。だから、あなたのすべてのデータテーブルのインスタンス化ロジックをコールバックに入れてみてください。 – gdyrrahitis