2011-12-11 28 views
5

Tôi đang cố gắng gửi lat và lon cùng với hình ảnh webcam và một số dữ liệu khác bằng cách sử dụng PHP và javascript- đừng hỏi, đó chỉ là một dự án nhỏ mà tôi đã bắt đầu, hy vọng sẽ học được điều gì đó. Để cho lat và lon trở nên khả dụng, tôi phải gọi hàm webcam sau khi lat và lon đã được lấy ra. Đây là javascript tôi đang làm việc với (phần định vị địa lý là từ Lynda.com. Tôi kết hợp với JpegCam). Tôi đã thêm div lat và lon để giữ các giá trị. Sau đó, tôi gọi hàm webcam now_go() nhận được lat và dài bằng cách sử dụng getElementById(). Điều này hoạt động tuyệt vời miễn là người dùng chia sẻ vị trí của họ. Nếu không, hàm now_go() không được gọi. Nhưng nếu tôi gọi nó trước đó, lat và lon không có sẵn ngay cả khi người dùng đã quyết định chia sẻ vị trí của họ. Vì vậy, ở giai đoạn nào trong trò chơi tôi có thể biết liệu người dùng đã chọn không chia sẻ?Tại thời điểm nào tôi có thể biết liệu người dùng đã chọn không chia sẻ vị trí của họ?

<script type="text/javascript"> 
    var t = new bwTable(); 
    var geo; 

    function getGeoLocation() { 
     try { 
      if(!! navigator.geolocation) return navigator.geolocation; 
      else return undefined; 
     } catch(e) { 
      return undefined; 
     } 
    } 

    function show_coords(position) { 
     var lat = position.coords.latitude; 
     var lon = position.coords.longitude; 
     element('lat').innerHTML = lat; 
     element('lon').innerHTML = lon; 
     t.updateRow(0, [ lat.toString(), lon.toString() ]); 
     dispResults(); 
     now_go(); 
    } 

    function dispResults() { 
     element('results').innerHTML = t.getTableHTML(); 

    } 

    function init() { 
     if((geo = getGeoLocation())) { 
      statusMessage('Using HTML5 Geolocation') 
      t.setHeader([ 'Latitude', 'Longitude' ]); 
      t.addRow([ '&nbsp;', '&nbsp;' ]); 
     } else { 
      statusMessage('HTML5 Geolocation is not supported.') 
     } 
     geo.getCurrentPosition(show_coords); 
    } 

    window.onload = function() { 
     init(); 
    } 
</script> 

Đây là một phần của kịch bản webcam mà tôi trở thành một chức năng để tôi có thể gọi nó là sau khi lat và lon đã lấy:

<script language="JavaScript"> 
     function now_go(){ 
      var lat = null; 
      var lon = null; 
    if ($("#lat").length > 0){   
     var lat = document.getElementById('lat').innerHTML; 
     } 

      if ($("#lon").length > 0){   
     var lon = document.getElementById('lon').innerHTML; 
      } 
      webcam.set_api_url('webcam/test/' + lat + '/' + lon); 
    webcam.set_quality(90); // JPEG quality (1 - 100) 
    webcam.set_shutter_sound(true, '/mark/js/webcam/shutter.mp3'); 

     }  

</script> 

tôi chắc chắn rằng mã này có các vấn đề khác , nhưng đây là những gì nó trông giống như ngay bây giờ. Và năm giờ sáng, tôi nghĩ rằng nó sẽ tiếp tục như vậy trong một thời gian.

Bất kỳ lời khuyên hoặc đề xuất nào đều tuyệt vời.

Cảm ơn, Đánh dấu

+0

Tôi không chắc chắn lý do tại sao bạn sử dụng số double không phải là '!! navigator.geolocation' để kiểm tra điều kiện này. Nếu bạn đang kiểm tra sự tồn tại của nó, không phải là 'if (! Navigator.geolocation) {alert ('Trình duyệt của bạn không hỗ trợ Định vị địa lý.')}' –

+0

Không trực tiếp hữu ích cho câu hỏi của bạn, nhưng không nên sử dụng bất kỳ địa lý nào biến được bên trong if ((geo = getGeoLocation())) bit? Sử dụng nó sau khi khối khác sẽ thất bại nếu nhiệm vụ không thành công. – Thor84no

+0

Xem tại đây: http://stackoverflow.com/questions/7463367/how-to-call-function-when-user-allows-or-denies-access-to-physical-location –

Trả lời

8

Xem this link. Có một đối số thứ hai cho phương thức navigator.geolocation.getCurrentPosition() cho phép bạn chuyển sang một hàm khác:

navigator.geolocation.getCurrentPosition(show_coords, function(error) { 
    switch(error.code) 
    { 
     case error.PERMISSION_DENIED: alert("user did not share geolocation data"); 
     break; 

     case error.POSITION_UNAVAILABLE: alert("could not detect current position"); 
     break; 

     case error.TIMEOUT: alert("retrieving position timedout"); 
     break; 

     default: alert("unknown error"); 
     break; 
    } 
}); 
+0

Cảm ơn, đó chính xác là những gì tôi đang tìm kiếm! – Mark

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