fixed provider.json using jsonp
This commit is contained in:
parent
135aecbfc4
commit
2d7bbc7afe
@ -343,13 +343,26 @@
|
||||
};
|
||||
var url = this._tilerHost() + "/tiles/layergroup";
|
||||
var extra = this._extraParams();
|
||||
torque.net.post( url + (extra ? "?" + extra: ''), JSON.stringify(layergroup) , function (req) {
|
||||
|
||||
// tiler needs map_key instead of api_key
|
||||
// so replace it
|
||||
if (extra) {
|
||||
extra = extra.replace('api_key=', 'map_key=');
|
||||
}
|
||||
|
||||
url = url +
|
||||
"?config=" + encodeURIComponent(JSON.stringify(layergroup)) +
|
||||
"&callback=?" + (extra ? "&" + extra: '');
|
||||
|
||||
torque.net.jsonp(url, function (data) {
|
||||
var query = format("select * from ({sql}) __torque_wrap_sql limit 0", { sql: self.getSQL() });
|
||||
self.sql(query, function (queryData) {
|
||||
callback({
|
||||
updated_at: JSON.parse(req.response).last_updated,
|
||||
fields: queryData.fields
|
||||
});
|
||||
if (data) {
|
||||
callback({
|
||||
updated_at: data.last_updated,
|
||||
fields: queryData.fields
|
||||
});
|
||||
}
|
||||
}, { parseJSON: true });
|
||||
});
|
||||
},
|
||||
|
@ -4,6 +4,41 @@
|
||||
|
||||
var lastCall = null;
|
||||
|
||||
function jsonp(url, callback, options) {
|
||||
options = options || { timeout: 10000 };
|
||||
var head = document.getElementsByTagName('head')[0];
|
||||
var script = document.createElement('script');
|
||||
|
||||
// function name
|
||||
var fnName = 'torque_' + Date.now();
|
||||
|
||||
function clean() {
|
||||
head.removeChild(script);
|
||||
clearTimeout(timeoutTimer);
|
||||
delete window[fnName];
|
||||
}
|
||||
|
||||
window[fnName] = function() {
|
||||
clean();
|
||||
callback.apply(window, arguments);
|
||||
};
|
||||
|
||||
// timeout for errors
|
||||
var timeoutTimer = setTimeout(function() {
|
||||
clean();
|
||||
callback.call(window, null);
|
||||
}, options.timeout);
|
||||
|
||||
// setup url
|
||||
url = url.replace('callback=\?', 'callback=' + fnName);
|
||||
script.type = 'text/javascript';
|
||||
script.src = url;
|
||||
script.async = true;
|
||||
// defer the loading because IE9 loads in the same frame the script
|
||||
// so Loader._script is null
|
||||
setTimeout(function() { head.appendChild(script); }, 0);
|
||||
}
|
||||
|
||||
function get(url, callback, options) {
|
||||
options = options || {
|
||||
method: 'GET',
|
||||
@ -52,6 +87,7 @@
|
||||
torque.net = {
|
||||
get: get,
|
||||
post: post,
|
||||
jsonp: jsonp,
|
||||
lastCall: function() { return lastCall; }
|
||||
};
|
||||
|
||||
|
30
test/request.js
Normal file
30
test/request.js
Normal file
@ -0,0 +1,30 @@
|
||||
module('request')
|
||||
|
||||
asyncTest("json", 6, function() {
|
||||
var called = null;
|
||||
torque.net.jsonp('http://test.com?callback=?', function(test) {
|
||||
called = arguments;
|
||||
});
|
||||
|
||||
setTimeout(function() {
|
||||
var scripts = document.getElementsByTagName('script');
|
||||
var found = null;
|
||||
for (var i = 0 ; !found && i < scripts.length; ++i) {
|
||||
var s = scripts[i];
|
||||
if (s.getAttribute('src').indexOf('test.com') !== -1) {
|
||||
found = s;
|
||||
}
|
||||
}
|
||||
var src = found.getAttribute('src');
|
||||
var fnName = src.match(/torque_.*/);
|
||||
window[fnName]('test1', 2, null);
|
||||
equal(src.indexOf('http://test.com?callback=torque_'), 0);
|
||||
equal(called[0], 'test1');
|
||||
equal(called[1], 2);
|
||||
equal(called[2], null);
|
||||
equal(found.parent, null);
|
||||
equal(window[fnName], undefined);
|
||||
QUnit.start();
|
||||
}, 5);
|
||||
|
||||
});
|
@ -19,5 +19,6 @@
|
||||
<script src="core.js"></script>
|
||||
<script src="provider.jsonarray.js"></script>
|
||||
<script src="provider.json.js"></script>
|
||||
<script src="request.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
Loading…
Reference in New Issue
Block a user