У меня есть одна из самых проблем, с которыми я когда-либо сталкивался с языком программирования. Im читает некоторые xml, а затем пытается отобразить на веб-странице. У меня нет проблем с этим. Вот код, как это сделать.обновление веб-страницы с помощью объекта цикла с помощью javascript
// File: readXML.js
var shared = [];
var sheet = new Array()
// Start function when DOM has completely loaded
$(document).ready(function(){
var bigo = new Object();
console.log("can you see me.");
var sheetJoint = new Object();
// get the sheet xml file
$.get("sheet1.xml",{},function(xml){
var attrs = [];
// this is a loop within a loop. we traverse the values in the xml to get end up with a key pair value of key: val
// in our case this works out to be A1 = 0 this is the first step to get the actual value from the sharedstring.xml
// Run the function for each row tag in the XML file
$(xml).find("row").each(function(i) {
//run the function for each c tag in the xml and get the attribute.
//this is the attribute that references the actual column.
$(this).find("c").each(function(i){
$('c',xml).each(function(i) {
v1 = $(this).attr("r");
bigo[v1] =v1;
bigo[v1]= $(this).find("v").text();
});
})});
//get the shared string elements to combine with the other
$.get("sharedStrings.xml",{},function(xml){
$('si',xml).each(function(i) {
shared.push($(this).find("t").text());
})});
});
combineObjects(bigo);//combine the the array and the object.
});
Поскольку у меня есть два чтения двух разных файлов xml, я должен использовать другую функцию для их объединения. Вот эта функция.
function combineObjects(obj){
myHTMLOutput = '';
myHTMLOutput += '<table width="98%" border="1" cellpadding="0" cellspacing="0">';
myHTMLOutput += '<th>A</th>';
//mydiv=document.getElementById("ContentArea")
try{
var strt="";
var tempVal;
//loop throught the obejct and get the value from the returnTheValueSegment.
for (var ind in obj){
//if you want to print something to the log then just add this.
// pretty handy when trying to discover variable values. does not see to work well inside for loops thought.
// console.log("can you see me.");
tempVal = returnTheValueOfSegment(obj[ind]);
//bring the values
obj[ind] = tempVal;
}
for (var ind in obj){
mydata = BuildStudentHTML(ind);
myHTMLOutput = myHTMLOutput + mydata;
}
myHTMLOutput += '</table>';
$("#ContentArea").append(myHTMLOutput);
}
catch(err){alert(err)};
}
моя проблема возникает, когда я создаю таблицу. его в основном ударил или пропустил ... , если я попробую его в firefox, он работает, только если я использую firebug и прохожу через код, иначе он не покажет элементы таблицы.
вот код, который вызывается для создания таблицы.
function BuildStudentHTML(column1){
// Build HTML string and return
output = '';
output += '<tr>';
output += '<td>'+ column1 +'</td>';
output += '</tr>';
return output;
}
что я могу делать неправильно. мне нужен какой-то таймер? это то, что цикл должен быть быстрым, а обновление страницы не может обновляться. Пожалуйста, если кто-то может указать мне в правильном направлении, я был бы навсегда благодарен.
Вы знаете, что '$ .get' является ** асинхронным **, правильно? И что возвращенные объекты будут недоступны до тех пор, пока HTTP-запросы не будут завершены? Вам нужно объединить возвращенные объекты с отсрочкой с '$ .when()', а затем выполнить свою «комбайновую» работу в обратном вызове. – Pointy
Спасибо за ответ pointy.but вы в основном говорите, что функция движется вперед еще до того, как $ .get сделан? Можете ли вы указать мне в правильном направлении с обратным вызовом из .get? Im действительно новый для jquery и пытается понять. – user677275
Да - '$ .get()' немедленно возвращает ** **, хотя может быть много миллисекунд или секунд до завершения HTTP-запроса. См. Ответ @ wecsam. – Pointy