2012-02-24 45 views
5

All, Tôi đã có đoạn mã sau:Javascript/Google Maps gây ra lỗi PIE.htc

<script type="text/javascript"> 
function Store(lat, long, text) 
{ 
    this.latitude = lat; 
    this.longitude = long; 
    this.html = text; 
} 

var myStores = [<?php echo $jsData;?>, null]; 
addLoadEvent(loadMap); 

này là dân cư với đoạn mã sau:

$lat = $post->latitude; 
$long = $post->longitude; 
$post_id = $post->ID; 
$get_post_info = get_post($post_id); 
$name = $get_post_info->post_title; 
$jsData = $jsData . "new Store($lat, $long, '$name'),\n"; 

My trang tải tốt mà không có phần javascript. Tuy nhiên khi tôi thêm javascript tôi nhận được lỗi sau:

 
User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; MS-RTC LM 8; AskTbAD2/5.14.1.20007) 
Timestamp: Wed, 22 Feb 2012 16:45:35 UTC 

Message: Arg: Illegal input string in Vector2D 
Line: 68 
Char: 63 
Code: 0 
URI: http://localhost/wordpress/wp-content/themes/parallelus-mingle/assets/css/PIE.htc 

Tôi thực sự thu hẹp nó xuống hơn nữa và dòng này là một trong những gây ra lỗi:

addLoadEvent(loadMap); 

Đây là mã hoàn chỉnh cho addLoadEvent (loadMap):

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
<script type="text/javascript"> 
function addLoadEvent(func) { 
var oldonload = window.onload; 
if (typeof window.onload != 'function'){ 
    window.onload = func 
} else { 
    window.onload = function() { 
     oldonload(); 
     func(); 
    } 
} 
} 

var map, 
    infowin=new google.maps.InfoWindow({content:'moin'}); 
function loadMap() 
{ 
    map = new google.maps.Map(
    document.getElementById('map'), 
    { 
     zoom: 12, 
     mapTypeId:google.maps.MapTypeId.ROADMAP, 
     center:new google.maps.LatLng(<?php echo $_SESSION['pav_event_latitude']; ?>, 
            <?php echo $_SESSION['pav_event_longitude']; ?>) 
    }); 

    addPoints(myStores); 
} 

function addPoints(points) 
{ 
    var bounds=new google.maps.LatLngBounds(); 
    for (var p = 0; p < points.length; ++p) 
    { 
    var pointData = points[p]; 
    if (pointData == null) {map.fitBounds(bounds);return; } 
    var point = new google.maps.LatLng(pointData.latitude, pointData.longitude); 
    bounds.union(new google.maps.LatLngBounds(point)); 
    createMarker(point, pointData.html); 
    } 
    map.fitBounds(bounds); 

} 

var number = 2; // or whatever you want to do here 
function createMarker(point, popuphtml) 
{ 
    var popuphtml = "<div id=\"popup\">" + popuphtml + "<\/div>"; 
    var marker = new google.maps.Marker(
    { 
     position:point, 
     map:map, 
     icon:'https://chart.googleapis.com/chart?chst=d_map_pin_letter&chld='+number+'|FF776B|000000', 
     shadow:'https://chart.googleapis.com/chart?chst=d_map_pin_shadow' 
    } 
); 
    google.maps.event.addListener(marker, 'click', function() { 
     infowin.setContent(popuphtml) 
     infowin.open(map,marker); 
    }); 

} 
</script> 

Bất kỳ ý tưởng nào sẽ gây ra lỗi?

+0

Điều này chỉ xảy ra trong IE8? Bạn đang sử dụng phiên bản PIE nào? Bạn đang sử dụng phiên bản API GoogleMaps nào? Bạn đang sử dụng thư viện nào khác (ngoài PIE)? – pete

+0

@pete Nó hoạt động trong Firefox, Chrome, Safari v.v. vì vậy chỉ cần IE8. Tôi đang sử dụng phiên bản 1.0 Beta 3 của PIE (ít nhất đó là những gì nó nói trong tập tin của tôi). Tôi đang sử dụng Google Maps V3 và tôi đang sử dụng jQuery, Modenizer để đặt tên cho một cặp vợ chồng. – user1048676

Trả lời

3

Dường như addLoadEvent() của bạn không hoạt động như bình thường, và đang gửi danh sách đối số trống của bạn cho loadMap() đến phương thức sự kiện onload PIE.htc. Ngoài ra, tôi tin rằng typeof của một hàm sẽ thực sự trả lại object không phải function. Dù bằng cách nào, hãy thử thả này thay cho chức năng của bạn:

function addLoadEvent(func) { 
    if (window.addEventListener) { 
     window.addEventListener('load', func, false); 
    } else if(window.attachEvent) { 
     window.attachEvent('onload', func); 
    } 
} 

Một lựa chọn khác, trong đó sẽ đảm bảo rằng nó hoạt động trong tất cả các trình duyệt, sẽ được sử dụng jQuery $(document).ready(), domReady, hoặc một số tương đương khác.

Edit: Ngoài ra, dòng này:

var myStores = [<?php echo $jsData;?>, null]; 

sẽ kết thúc với hai dấu phẩy trước khi null, trừ khi bạn bỏ qua một số mã PHP trong câu hỏi ban đầu của bạn.

+0

Tại sao bạn nghĩ my var của tôi kết thúc bằng hai dấu phẩy trước giá trị rỗng? Tôi không hiểu tại sao bạn lại nghĩ vậy? – user1048676

+0

vì dòng này: '$ jsData = $ jsData. "Cửa hàng mới ($ lat, $ long, '$ name'), \ n"; ' –

+0

Có, $ lat, $ long và name được điền bằng hộp mã trong câu hỏi của tôi. – user1048676

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