问题
I'm trying to load two scripts with the $.getScript
function of getting Google Map script, then after that is loaded, I get another script (goMap) which makes map applets easily to be made.
However, when loaded, the first script of getting Google Map API is good, then the second script returns a parse error and shows this:
TypeError: 'undefined' is not a constructor'
Yet, I don't know where that is referencing from or which line, I think it must be trying to execute the Geocoder on this file (first line after (function($){
:
http://www.pittss.lv/jquery/gomap/js/jquery.gomap-1.3.2.js
Here is my code:
$.getScript('http://maps.google.com/maps/api/js?sensor=true').done(function()
{
$.getScript('../js/gomap.js').done(function()
{
// this never gets called
alert('gomap loaded');
}).fail(function(jqxhr, settings, exception)
{
alert(exception); // this gets shown
});
}).fail(function()
{
alert('failed to load google maps');
});
I tried changing the AJAX settings to set async
to false
, but it didn't help at all.
回答1:
The error is caused by the fact that the Google Maps API expects to be loaded in the head, using <script src="http://maps.google.com/maps/api/js?sensor=true"></script>
.
If you cannot do that for some reason, there's still hope. The Google Maps API does not work, because it uses document.write
to inject a dependency in the page. To get the code to work, you can overwrite the native document.write
method.
Demo: http://jsfiddle.net/ZmtMr/
var doc_write = document.write; // Remember original method;
document.write = function(s) {$(s).appendTo('body')};
$.getScript('http://maps.google.com/maps/api/js?sensor=true').done(function() {
$.getScript('../js/gomap.js').done(function() {
alert('gomap loaded');
document.write = doc_write; // Restore method
}).fail(function(jqxhr, settings, exception) {
alert(exception); // this gets shown
document.write = doc_write; // Restore method
});
}).fail(function() {
alert('failed to load google maps');
});
回答2:
@lolwut Try
$.getScript('http://maps.google.com/maps/api/js?sensor=true').done(function()
{
alert(11);
$.getScript('http://www.pittss.lv/jquery/gomap/js/jquery.gomap-1.3.2.js').done(function()
{
// this never gets called
alert('gomap loaded');
}).fail(function(jqxhr, settings, exception)
{
alert(exception); // this gets shown
});
}).fail(function()
{
alert('failed to load google maps');
});
If this works then you're relative path ../js/gomap.js is wrong!
来源:https://stackoverflow.com/questions/9343666/jquery-getscript-returns-an-parse-error-exception