2011-01-07 49 views
10

Tôi có một nút mà tôi đã kết nối onclick với một cuộc gọi để truy xuất vị trí của người dùng và sau đó sử dụng vị trí để thực hiện một cuộc gọi khác để truy xuất danh sách các vị trí lân cận. Đối với một số lý do phương pháp thành công định vị được gọi hai lần vào lần nhấp thứ hai của nút.Tại sao javascript này được gọi hai lần?

Vì vậy, tôi tải trang, nhấp vào nút, cho phép sử dụng vị trí của tôi và nó sẽ thực hiện một yêu cầu ajax để nhận các vị trí lân cận. Điều này hoạt động tốt.

Tôi nhấp lại vào nút, cho phép sử dụng vị trí của tôi (lần nữa), nó sẽ thực hiện một yêu cầu ajax để nhận vị trí, chờ ~ 2 giây và sau đó thực hiện yêu cầu khác bằng cùng tọa độ mà không cần tôi cho phép. Vì vậy, phương pháp thành công đã được nhận được gọi là hai lần, nhưng tôi không chắc chắn lý do tại sao.

$("#FindLocation").click(function() { 
    myScript.findNearbyLocations(displayData, displayError); 
}); 

Chức năng nhấp này không được gọi hai lần và tôi đã nhận xét tất cả mã hiển thịData và displayError.

findNearbyLocations: function (onSuccess, onFailure) { 
    if (navigator.geolocation) { 
    browserSupportFlag = true; 
    navigator.geolocation.getCurrentPosition(function (position) { 
     alert('This is getting called twice except on the initial call.'); 
     myScript.findStores(position.coords.latitude, position.coords.longitude, onSuccess, onFailure); 
    }, function() { 
     onFailure(true); 
    }); 
    } 
} 

Bất cứ ai nhìn thấy nơi tôi đã đi sai?

Chỉnh sửa: Tôi không nghĩ đánh dấu là vấn đề. Tôi chỉ sử dụng các trang web cơ bản để thử nghiệm. Không có kiểu dáng hoặc các yếu tố khác vào lúc này.

<form id="form1" runat="server"> 
    <div>  
    <MyControls:Search ID="Search" runat="server" /> 
    </div> 
</form> 

và điều khiển người dùng (cùng với tất cả các javascript cần thiết bao gồm)

<script type="text/javascript"> 
    $(document).ready(function() { 
    $("#FindLocation").click(function() { 
     myScript.findNearbyLocations(displayData, displayError); 
    }); 
    }); 
</script> 

<input type="button" id="FindLocation" value="Find Location" /> 
<div id="results"> 
</div> 
+0

không nên bậtĐảm bảo trên dòng cuối cùng của bạn ở đó? – DOK

+0

@DOK, điều đó sẽ phụ thuộc vào phương thức 'onFailure' của anh ta với thông số được truyền cho nó. – CaffGeek

+0

@DOK, không, chức năng đó chỉ thực hiện trong việc trình duyệt có hỗ trợ tính năng định vị navigator.geolocation hay không. Vì chúng tôi đã đưa nó vào câu lệnh if, tôi biết nó được hỗ trợ nhưng người dùng có thể đã từ chối quyền truy cập để sử dụng vị trí của họ. – Brandon

Trả lời

4

Có thể là lỗi trong số getCurrentPosition của bất kỳ ứng dụng khách nào bạn đang sử dụng. Trong trường hợp đó, bạn có thể chỉ cần đặt cờ khi phương thức thành công được gọi và không cho phép chức năng findStores được gọi là lần thứ hai.

2

Bất cứ khi nào tôi đã tìm thấy điều này xảy ra, đó là vì tôi vô tình bị ràng buộc các sự kiện để kiểm soát hai lần.

Nếu mã

$("#FindLocation").click(function() { 
    myScript.findNearbyLocations(displayData, displayError); 
}); 

xảy ra để được chạy hai lần, bạn sẽ có hai sự kiện nhấp chuột giống hệt ràng buộc, và hành động sẽ xảy ra hai lần.

+0

Tôi có mã đó trong hàm document.ready. Tôi không tin rằng nó đang bị ràng buộc hai lần. Tôi đặt một cảnh báo trước cuộc gọi findNearbyLocations và nó chỉ được gọi một lần mỗi lần cho lần nhấp đầu tiên và tiếp theo. – Brandon

2

Tôi gặp phải vấn đề tương tự, có vẻ như đó là lỗi trình duyệt (được thử nghiệm trong Firefox và Safari). Tôi chỉ đơn giản là xác nhận cho dù tôi đã đã lấy ra cùng một dữ liệu trong một khoảng thời gian gần đây, tương tự như những gì được trả lời ở đây: navigator.geolocation.getCurrentPosition sometimes works sometimes doesn't

Nhiều câu hỏi trong Google nhưng không có câu trả lời dứt khoát: http://www.google.nl/search?q=geolocation.getCurrentPosition+called+twice&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a

+1

+1 để xác nhận đó là lỗi. Đoán tôi sẽ đi với câu trả lời của wosis và chỉ cần vượt qua trong một lá cờ. Cảm ơn. – Brandon

0

này đang xảy ra, và nó đang xảy ra với tần suất dự đoán được; những gì tôi đã tìm thấy trong ứng dụng tôi đang làm ngay bây giờ là khi lỗi được nêu ra và không bị bắt, ở đâu đó trong một số chức năng ẩn danh, xuất hiện để chấm dứt phiên Javascript hiện tại, đó là khi nó bắt đầu xảy ra. Đó là bực bội và khó chịu; Tôi biết lý do tại sao điều này đang xảy ra, nhưng tôi không biết ở đâu nó đang diễn ra ...

Nhưng nó , vì vậy chỉ cần nhận xét nhanh rằng tất cả câu trả lời "không thể xảy ra" không chính xác hoặc hữu ích đến mức khủng khiếp.

Dù sao, đó là câu trả lời của tôi; bạn có thể có một số chức năng bên trong tung ra một lỗi mà JQuery đang lặng lẽ ăn hoặc một cái gì đó.

$ .02

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