2009-07-14 35 views
6

Tôi đang cố gắng tải dữ liệu từ tệp .js bên ngoài, chứa biểu diễn json của một loạt dữ liệu. Tôi không thể cho cuộc sống của tôi tìm ra cách truy cập dữ liệu bên trong trang. Tôi chắc rằng điều này thực sự dễ dàng và tôi thiếu một vài thứ đơn giản! ngay bây giờ, tôi đang thử điều này:Làm cách nào để tải JSON bên ngoài từ tập lệnh trên trang web?

$(document).ready(function(){ 
    $.getJSON("http://api.crunchbase.com/v/1/company/xobni.js", 
     function(data){ 
      alert(data.company_url); 
     }); 
    }); 

... rõ ràng là rất sai, vì không có gì xảy ra. Tôi đã thử tải nó trong một thẻ <script>, nhưng firebug cho tôi biết nó thậm chí không tải. làm thế nào tôi có thể vít mà lên? dù sao, tôi đã sẵn sàng để kéo tóc của tôi ra, và tôi con số này sẽ mất một người nào đó khoảng 15 giây để tìm ra.

Trả lời

13

tệp dữ liệu đó không có mục nhập company_url. Ngoài ra, tệp .js được phân phát với text/javascript loại mime, khi được phân phối với application/json (hoặc application/x-javascript, hãy sửa tôi trên đó).

Lý do thực sự, tất nhiên, là bạn cần thêm ?callback=? vào url của mình. Sau đó, mọi thứ sẽ hoạt động. Vì vậy, nó sẽ trông như thế này:

$(document).ready(function(){ 
    $.getJSON("http://api.crunchbase.com/v/1/company/xobni.js?callback=?", 
     function(data){ 
      alert(data.homepage_url); 
     }); 
    }); 
+0

tôi nhập sai biến trước đó, đó không phải mã tôi thực sự đang chạy :-) cuộc gọi đã sửa lỗi - tôi không thực sự chắc chắn điều đó có nghĩa là gì, nhưng tôi CÓ THỂ truy cập dữ liệu ngay bây giờ! CẢM ƠN BẠN!! –

+0

Thật cẩn thận, điều đó có thể có nghĩa là dữ liệu của bạn và javascript truy xuất dữ liệu đó không nằm trên cùng một miền. Việc thêm tham số gọi lại yêu cầu jQuery sử dụng JSONP thay vì JSON. JSONP về cơ bản là một hack để làm việc xung quanh các vấn đề tên miền chéo. – Prestaul

1

Có vẻ ổn ngay từ cái nhìn đầu tiên. Bạn có chắc rằng phản hồi là JSON hợp lệ không? Là loại nội dung không chính xác, có lẽ? URL nguồn trên chính xác là cùng một miền với trang của bạn phải không? (bao gồm giao thức và số cổng)

chỉnh sửa:

Tôi đã tải JSON của bạn và không có thuộc tính "company_url".

3

Tôi đã xem dữ liệu json. Có vẻ như không có company_url. Bạn có thể muốn homepage_url

$(document).ready(function(){ 
    $.getJSON("http://api.crunchbase.com/v/1/company/xobni.js", 
     function(data){ 
      alert(data.homepage_url); 
     }); 
    }); 
+0

'data.company_url' sẽ tạo ra không xác định nếu chức năng gọi lại sẽ chạy ở tất cả. – SilentGhost

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