2010-11-05 50 views
11

tôi làm lười tải các bản đồ google api v3 javascripttải lười biếng bản đồ google api v3 jQuery callback

Các tài liệu nói về việc đặt như một tham số callback trong url tên của hàm, mà sẽ được thực hiện, khi tập lệnh đã được tải.

$(document).ready(function(){ 
    var s = document.createElement("script"); 
    s.type = "text/javascript"; 
    s.src = "http://maps.google.com/maps/api/js?v=3&sensor=true&callback=gmap_draw"; 
    $("head").append(s); 
}); 

Vì vậy, tôi phải xác định hàm gmap_draw().

Khi tôi đính kèm hàm này trong khối domready, nó không hiển thị.

Bất kỳ giải pháp nào cho vấn đề này? (ngoại trừ việc đặt chức năng ra khỏi khối domready)

Trả lời

20

Vì cuộc gọi lại phải là toàn cầu, bạn có thể thực hiện một cuộc gọi bằng cách truy cập window từ bên trong trình xử lý sẵn sàng.

$(document).ready(function(){ 
    var s = document.createElement("script"); 
    s.type = "text/javascript"; 
    s.src = "http://maps.google.com/maps/api/js?v=3&sensor=true&callback=gmap_draw"; 
    window.gmap_draw = function(){ 
     alert ("Callback code here"); 
    }; 
    $("head").append(s); 
}); 
+0

Có không có cách nào để nhập tên callback namespaced? Như bạn đã nói, hàm trên là toàn cầu, do đó, nó dễ đọc hơn để đặt nó ra khỏi khối jquery. Cách tiếp cận tốt đẹp, cảm ơn bạn đã chia sẻ – astropanic

+0

Nếu bằng cách gọi lại không gian tên, bạn có nghĩa là định nghĩa một cuộc gọi lại trong một đối tượng "myNamespace" (hoặc tương tự) không? –

+0

giả sử chúng ta có một đối tượng gmapsFactory, và tôi muốn thực hiện một gmapsFactory.init() – astropanic

32

Một lựa chọn khác là sử dụng Google Loader:

$.getScript('https://www.google.com/jsapi', function() 
{ 
    google.load('maps', '3', { other_params: 'sensor=false', callback: function() 
    { 
     // Callback code here 
    }}); 
}); 
+0

Hoàn hảo để sử dụng bên trong các lớp tùy chỉnh tải bản thân tập lệnh. Cảm ơn bạn :) – Archer

+0

Cảm ơn công trình này hoàn hảo – Orlando

+0

Đã lưu ngày: D – yuva

Các vấn đề liên quan