passing variale to javascript callback function
面对将变量传递给javascript回调函数的问题。 无法理解,为什么它不起作用。
这是代码。 我通过许多函数传递变量'i'。 'function1'只是一个例子,有一大段代码。
回调中的代码'var tmpl'只是一个例子,不要注意这一点。 问题是为什么我不能传递'i'变量。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | function function1() { for (var i = 0; i < 10; i++){ RequestData(i); } } function RequestData(i, callback){ var xhr = new XMLHttpRequest(); xhr.open('GET', '/getitemID='+i, true); xhr.send(); xhr.onreadystatechange = function() { // (3) if (xhr.readyState != 4) return; if (xhr.status != 200) { alert(xhr.status + ': ' + xhr.statusText); } else { alert(xhr.responseText); callback(JSON.parse(xhr.responseText)); } xhr.close(); } } RequestData(i, function (json) { alert('here!'); var tmpl = [ '', '<button onclick="RequestData("+i+")">Load Data!</button>', '#here!' ].join(''); var body = document.querySelector('body'); alert(body); for (var i = 0; i < json.length; i++) { var html = tmpl.replace('#here!', json[i].itemid); body.insertAdjacentHTML('afterbegin', html); } }); |
如果我尝试这样调用回调:
首先,
您只能从
要使其正常工作,请从
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | function function1() { for (var i = 0; i < 10; i++){ RequestData(i, function (json) { alert('here!'); var tmpl = [ '', '<button onclick="RequestData("+i+")">Load Data!</button>', '#here!' ].join(''); var body = document.querySelector('body'); alert(body); for (var i = 0; i < json.length; i++) { var html = tmpl.replace('#here!', json[i].itemid); body.insertAdjacentHTML('afterbegin', html); } }); } } function RequestData(i, callback){ var xhr = new XMLHttpRequest(); xhr.open('GET', '/getitemID='+i, true); xhr.send(); xhr.onreadystatechange = function() { // (3) if (xhr.readyState != 4) return; if (xhr.status != 200) { alert(xhr.status + ': ' + xhr.statusText); } else { alert(xhr.responseText); callback(JSON.parse(xhr.responseText)); } //xhr.close(); // this is not an existing function } } // run the for loop by calling this method function1(); |