I'm helping out matt in
http://groups.google.com/group/simile-widgets/browse_thread/thread/731e105551685399/e6c492871cfe3f5d#e6c492871cfe3f5d
to try and get the app to run a bit smoother (the browser lag in FF is
terrible!). I've been playing with the idea of loading JSON in chunks
using a service that takes an offset, then adding the data to
Exhibit. This works, but is still really slow to load.
What I would like to do is programmatically load each JSON chunk once
a successful request has been made. Here's what I think should work:
/*==================================================
* Exhibit.ExhibitJSONChunkImporter
*==================================================
*/
Exhibit.ExhibitJSONChunkImporter = {
};
Exhibit.importers["application/json-chunk"] =
Exhibit.ExhibitJSONChunkImporter;
Exhibit.ExhibitJSONChunkImporter.load = function(link, database, cont)
{
var url = typeof link == "string" ? link : link.href;
var last_chunk = -1;
var items = [];
url = Exhibit.Persistence.resolveURL(url);
var fChunk = function(xmlhttp) {
try {
var o = null;
try {
o = eval("(" + xmlhttp.responseText + ")");
} catch (e) {
Exhibit.UI.showJsonFileValidation(Exhibit.l10n.badJsonMessage(url,
e), url);
}
if (o != null) {
if (o.status == 'ok') {
last_chunk = o.chunk;
// THIS NEXT LINE DOESN'T WORK EVERY
TIME!
database.loadData(o,
Exhibit.Persistence.getBaseURL(url));
if (last_chunk + 1 < o.chunks) {
return true;
}
} else {
}
}
} catch (e) {
SimileAjax.Debug.exception(e, "Error loading Exhibit
JSON chunk
data from " + url);
}
return false;
}
var fError = function(statusText, status, xmlhttp) {
Exhibit.UI.hideBusyIndicator();
Exhibit.UI.showHelp(Exhibit.l10n.failedToLoadDataFileMessage
(url));
if (cont) cont();
};
var fDone = function(xmlhttp) {
try {
if (fChunk(xmlhttp)) {
SimileAjax.XmlHttp.get(url + '?chunk=' +
(last_chunk+1),
fError, fDone);
} else {
Exhibit.UI.hideBusyIndicator();
// Alternate database.loadItems(); can go here
}
} finally {
if (cont) cont();
}
};
Exhibit.UI.showBusyIndicator();
SimileAjax.XmlHttp.get(url, fError, fDone);
}
In there I try to call database.loadData(); for each chunk of JSON I
receive. This works for the first couple of chunks (I have a lot of
chunks), but I eventually get the following errors:
TypeError: this._dom is undefined "Error firing event of name
onItemsChanged" - debug.js (line 53)
Error firing event of name onItemsChanged "Error firing event of name
onAfterLoadingItems" - debug.js (line 53)
Database.loadItems failed "Error firing event of name
onAfterLoadingItems" - debug.js (line 53)
Error loading Exhibit JSON chunk data from http://<pathtoservice>/chunk.php
"Error firing event of name onAfterLoadingItems" - debug.js (line 53)
Error firing event of name onAfterLoadingItems "XmlHttp: Error
handling onReadyStateChange" - debug.js (line 53)
So I have two questions: 1) is database.loadItems(); capable of adding
data over multiple calls like I was hoping, or is there another
function/process I should try using? 2) I'm assuming the errors I'm
getting are related to my using the database.loadItems(); function the
way that I am -- is this assumption correct, or is there another place
I should be looking (apologies, I don't know this code very well yet)?
Thanks for any input!
-Craig
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"SIMILE Widgets" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/simile-widgets?hl=en
-~----------~----~----~----~------~----~------~--~---