2012-03-20 31 views
8

Tôi đang hiển thị biểu đồ của Google trong một số trang web hay không. Nhưng tôi không thể đảm bảo rằng khách hàng của mình sẽ có quyền truy cập mạng vào Google: máy tính của khách hàng sẽ ở trong cùng một mạng LAN với máy chủ web của tôi (có thể truy cập Google), nhưng tôi không đảm bảo rằng tất cả khách hàng sẽ có quyền truy cập bên ngoài mạng LAN .Làm cách nào để biết Google Visualization có được tải

Tôi muốn hiển thị dữ liệu sử dụng Charts Google cho những khách hàng có thể truy cập vào nó, và một bảng HTML đơn giản cho những ai không.

tôi đã cố gắng thiết lập một biến là false, và thay đổi nó là true trong một phương pháp gọi khi Visualization API của Google được nạp:

var canAccessGoogleVisualizationVar = false; 
google.load('visualization', '1', {packages: ['corechart'], callback: canAccessGoogleVisualization}); 
function canAccessGoogleVisualization() 
{ 
    canAccessGoogleVisualizationVar = true; 
} 

Nhưng nó dường như không làm việc.

Làm thế nào tôi có thể biết từ phía khách hàng nếu Google Visualization có thể truy cập được hay không?


Cập nhật: Đoạn mã trên đã không làm việc vì đoạn mã sau (mà tôi không gửi trước khi tôi nghĩ là không có ý nghĩa):

google.setOnLoadCallback(drawVisualization); 

function drawVisualization() 
{ 
    // Check if Google Visualization is loaded 
    if (!canAccessGoogleVisualizationVar) { 
     alert('Can't access Google Visualization'); 
    } 

    // The following code can be any of the samples from Google (see http://code.google.com/apis/ajax/playground/?type=visualization#pie_chart). 
    var data = new google.visualization.DataTable(); 
    // Add columns and values to data 
    ... 
    // Call new google.visualization.AnyChartBuilderFromTheAPI(<element>).draw(data); 
} 

tôi nhận thấy didn mã của tôi 't làm việc bởi vì, nếu canAccessGoogleVisualizationVar == true, chi nhánh if không được thực hiện và nếu số false thì function drawVisualization() sẽ không được thực hiện.

Vì vậy, tôi mất nếu kiểm tra bên ngoài các chức năng:

google.setOnLoadCallback(drawVisualization); 

function drawVisualization() 
{ 
    // Any drawVisualization unchanged from the samples from Google (see http://code.google.com/apis/ajax/playground/?type=visualization#pie_chart). 
} 

// Check if Google Visualization is loaded at the end of this <script> </script> 
if (!canAccessGoogleVisualizationVar) { 
    alert('Can't access Google Visualization'); 
} 
</script> 

Nhưng bây giờ nó không làm việc vì việc đánh giá if (!canAccessGoogleVisualizationVar) đang được thực hiện trước khi dòng google.load(?, ?, canAccessGoogleVisualization); gọi phương thức canAccessGoogleVisualization().

Làm cách nào để đảm bảo rằng tôi đang đọc giá trị canAccessGoogleVisualizationVarsau khi cố gắng thực hiện cuộc gọi đến google.load(...);?

+0

Cập nhật các câu hỏi với nhiều thông tin. –

+0

Đối với những gì nó có giá trị, nó có thể mất gviz js và css, và chỉ phục vụ nó lên từ bất cứ nơi nào ứng dụng nội bộ này. Nhiều người trong số các biểu đồ được thực hiện phía khách hàng, và do đó sẽ làm việc tốt theo cách này (tôi đã thực hiện nó). Chỉ cần nhìn vào các cuộc gọi mạng đi ra ngoài khi bạn tải api như bình thường và bạn có thể xem các tập tin bạn cần. Cần lưu ý rằng a) mã sẽ được rút gọn và b) bạn sẽ không nhận được bất kỳ cập nhật nào về mã mà không thay đổi nó theo cách thủ công, nhưng nó có thể là một tùy chọn :) – oli

+0

Cảm ơn @peter, tôi đang thử. Thực tế là các mã sẽ không được cập nhật nếu tôi không tự thay đổi nó là một cộng (trong trường hợp này). –

Trả lời

8

Bạn có thể thử

function canAccessGoogleVisualization() 
{ 
    if ((typeof google === 'undefined') || (typeof google.visualization === 'undefined')) { 
     return false; 
    } 
    else{ 
    return true; 
    } 
} 
+1

Nó phải là câu trả lời được chấp nhận. – C0ZEN

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