Câu hỏi của tôi là về Javascript. Tôi có một chức năng gọi lại nhận một đối tượng Vị trí trên một cuộc gọi lại thành công.Javascript gán giá trị trả về của hàm Gọi lại cho biến toàn cục
Vấn đề là khi tôi cố gắng đặt thuộc tính của đối tượng Vị trí thành biến toàn cầu tại cuộc gọi lại thành công, nó không cho phép tôi làm điều đó và toàn cầu vẫn không được xác định.
Để giải quyết thay vì đặt trực tiếp thuộc tính đối tượng thành biến toàn cục, tôi đang cố trả về hàm gọi lại nhưng tôi không thể tìm cách đặt giá trị trả về của hàm gọi lại thành toàn cầu biến.
Đây là mã được đơn giản hóa.
var x;
navigator.geolocation.getCurrentPosition(onSuccess, onError);
//on Successful callback receives a Position Object
function onSuccess(position) {
var coords = position.coords;
x=coords; // Setting directly to an object does not work x still remains undefined after succesful callback
return coord; // Trying to set this to a global object
}
// onError Callback receives a PositionError object
//
function onError(error) {
alert('code: ' + error.code + '\n' +
'message: ' + error.message + '\n');
}
điểm thực sự tốt, câu trả lời của tôi là một giám sát ngu ngốc trên một phần của tôi. mã không phải là tuyến tính vì vậy bạn sẽ cần phải làm bất cứ điều gì bạn muốn làm với các coords trong gọi lại, để đảm bảo giá trị đã được ràng buộc – WickyNilliams
Bạn đang thực sự right.The chức năng getCurrentPosition đang cố gắng để có được vị trí địa lý đó là không đồng bộ đó là lý do tại sao khi tôi cố gắng truy cập nó từ biến toàn cục, có lẽ nó không được thiết lập và trả về undefined.Isnt có cách nào để gán biến trả về giá trị sau khi hàm async được thực hiện với công việc của nó không? –
@Torukojin: Không, phải trả lại giá trị nào cho? Như đã nói, mã chạy không đồng bộ. Đó là lý do tại sao giá trị được chuyển như một tham số cho hàm gọi lại để bạn có thể sử dụng nó và làm bất cứ điều gì bạn muốn với nó. Nếu có thể 'trả về' giá trị, thì' getCurrentPosition' sẽ làm điều đó. Nhưng nó không phải là, do đó bạn đã cung cấp một cuộc gọi lại. Có thể bạn sẽ tìm thấy [bài viết này] (http://felix-kling.de/blog/2011/01/14/how-to-return-data-from-an-ajax-call/) hữu ích để hiểu vấn đề (nhưng tôi không phải là tốt bằng văn bản;)) –