私はコールバックについてよく読んできましたが、私はclickイベントなどに使用していますが、完全に理解していない状態で使っています。もう1つのJavascriptコールバックの問題/例
私は、それぞれ独自のjsページを持つ3つまたは4つのhtmlページを持つ単純なWebアプリケーションを持っています。
私は、必要な各HTMLページによって参照される新しいjsページに配置したいくつかのグローバル関数を持っています。私はこのファイルword_background.jsを使用して、長時間にわたり複数のページで使用される関数を保持しています。
pullLibrary
は、word_background.jsに存在する関数で、dbからプルして結果を処理します。
webpageOne.htmlからpullLibrary
に電話して、完了していることを確認してから、webpageOne.jsでさらに処理を行います。
webpageOne.jsで私はpullLibrary
を呼び出そうとしていますが、完了したら結果をwebpageOne.jsで使用してください。
コードはpullLibrary
(word_background.js)を実行しますが、処理を続行するためにwebpageOne.jsに「戻す」ことはありません。
私は続ける、それが完了すると、私はちょうど、(Ajaxの呼び出しなどがあります)pullLibrary
機能を実行したいと...私はコールバックにいくつかの重要な、重要な側面が欠落してい
を想定しています私のページ設定。
説明/訂正ありがとうございました。
このコードはwebpageOne.jsである:
pullLibrary(function(){
console.log('Now processing library...');
processLibrary();
updateArrays();
//Do a bunch more stuff
});
----- UPDATE -----
が、私は私の壊れた精神を照らしていると思うコメント...ありがとうこれがどのように機能すべきかについてのモデルです。
pullLibraryはajax関数です。データベースから引き出し、結果を配列とlocalStorageに格納します。
私が期待しているのは、私がpullLibraryを呼び出すことができ、完了したらコールバックコード(この場合は匿名関数)が実行されることです。
function pullLibrary(){ //Values passed from startup() if no data is local
//Pull data from database and create basic LIBRARY array for further processing in processLibrary sub
console.log("Starting to pull library array in background.js..." + "User: " + localStorage.userID + " License: " + localStorage.licType);
var url1 = baseURL + 'accessComments3.php';
var url2 = '&UserID=' + localStorage.userID + '&LicType=' + localStorage.licType;
//Need global index to produce unique IDs
var idIndex = 0;
var index = 0;
$.ajax({
type: "POST",
url: url1,
data: url2,
// dataType: 'text',
dataType: 'json',
success: function(result){
// success: function(responseJSON){
arrLibrary = result; //store for use on this page
localStorage.library = JSON.stringify(result); //Store for use elsewhere
console.log('Saving to global variable: ') + console.log(arrLibrary);
//Now mark last update to both sync storage and local storage so access from other browsers will know to pull data from server or just use local arrays (to save resources)
var timeStamp = Date.now();
var temp = {};
temp['lastSave'] = timeStamp;
// chrome.storage.sync.set(temp, function() {
console.log('Settings saved');
localStorage.lastSync = timeStamp;
console.log('Last update: ' + localStorage.lastSync);
//Store Group List
var arrComGroups = $.map(arrLibrary, function(g){return g.commentGroup});
// console.log('List of comment groups array: ') + console.log(arrComGroups);
arrComGroups = jQuery.unique(arrComGroups); //remove dupes
// console.log('Unique comment groups array: ') + console.log(arrComGroups);
localStorage.groupList = JSON.stringify(arrComGroups); //Store list of Comment Groups
//Create individual arrays for each Comment Groups
$.each(arrComGroups,function(i,gName){ //Cycle through each group of Comments
var arrTempGroup = []; //to hold an array for one comment group
arrTempGroup = $.grep(arrLibrary, function (row, i){
return row.commentGroup == gName;
});
//Store string version of each Comment Array
window.localStorage['group_' + gName] = JSON.stringify(arrTempGroup);
console.log('Creating context menu GROUPS: ' + gName);
});
// processLibrary(arrLibrary); //We've pulled the array with all comments - now hand off to processor
}, //End Success
error: function(xhr, status, error) {
alert("Unable to load your library from 11trees' server. Check your internet connection?");
// var err = eval("(" + xhr.responseText + ")");
// console.log('Error message: ' + err.Message);
}
}); //End ajax
}
'pullLibrary()'関数を表示する必要があります。 – JJJ
すべてをサーバーまたはコードコードに公開できますか? –
'pullLibrary()'に渡した匿名コールバック関数は決して実行されないという問題はありますか?あなたの 'pullLibrary()'関数のコードを見る必要があります –