私は本当に改善したいjsコードを持っていますが、その方法はわかりません。以下の動作バージョンには、グローバル変数と、無名関数にマージできると思われる個別の関数宣言があります(以下のコードを抜粋:動作していません)
ヘルプやポインタをいただければ幸いです。
作業バージョン:
var Data = {}; // would like to remove the global variable
function callBack() {
$.ajax({
url: "http://host/callBacks/script.js",
//get and execute Script to process json data below
dataType: "script"
});
}
$(document).ready(function() {
$.ajax({
type: "Get",
url: "http://host/data/json/",
success: function(json) {
Data = json; // Would like to just call the callback here
callBack(Data);
},
error: function() {
alert("error");
}
});
});
// Script which gets loaded from callBack
(function(Data) {
var json = $.parseJSON(Data);
$.each(json, function(i, v) {
alert(v);
});
})(Data);
必要なコード:機能しない
// Error: Length is null or not an object. In jQuery script
var Data = {}; // Ideally would like to remove this from global scope if possible
$(document).ready(function() {
$.ajax({
type: "Get",
url: "http://host//data/json/",
success: function(Data) {
$.ajax({
url: "http://host/callBacks/script.js",
dataType: "script"
});
},
error: function() {
alert("error");
}
});
// Error: Length is null or not an object. In jQuery script
更新:adeneoの回答によると:グローバルデータへの必要性= {}; 返されたすぐに実行されるスクリプトがパラメータとして取り込まれるため、
var Data = {};
$(document).ready(function() {
function doAjax() {
return $.ajax({
type: "GET",
url: "http://host/data/json/"
});
}
var XHR = doAjax();
XHR.done(function(data) {
Data = data; // <--- If I remove this I get Error:'length' is not or not an object
$.ajax({
url: "http://host/callBacks/script.js",
dataType: "script"
});
}).fail(function() {
alert("error");
});
});
しかし、十分に良いようです。おそらく、私はこれをIE8でテストしていることに言及する必要があります。制約。更新されたタグ