2011-08-03 39 views
5

Tôi hy vọng một người nào đó có thể giúp tôi. Tôi đang cố gắng làm một điều rất cơ bản: sử dụng Jquery để lấy Json từ một bộ điều khiển MVC3. Bộ điều khiển trả về mỹ Json nếu tôi gọi là URI trực tiếp http://www.youtipit.org/api/GetTipitByUrl?url=http://utipi.it/t/1834 từ một trình duyệt nhưng tôi nhận được một kết quả rỗng (trong Firebug) khi tôi cố gắng làm như sau:Cuộc gọi Ajax để nhận Json từ bộ điều khiển MVC3

$.getJSON('http://www.youtipit.org/API/GetTipitByUrl?url=http://www.youtipit.org/t/J1833', null, 

       function(data) { 

        if (data) { 
        alert('It Works!!'); 
        alert(data); 
        } 
       }); 

Trong firebug tôi nhận được một mã số 200 nhưng phản hồi trống. Tôi chắc rằng có một cái gì đó đơn giản tôi có thể làm trong Javascript của tôi để có được điều này để làm việc nhưng tôi mới đến này.

Trả lời

4

Có thể bạn vi phạm giới hạn same origin policy. Trừ khi trang web của bạn được lưu trữ trên www.youtipit.org bạn không thể gửi yêu cầu AJAX đến trang web đó. Có hai cách giải quyết có thể để hạn chế này:

  • Các trang web từ xa hỗ trợ JSONP (chú ý sự khác biệt với JSON) trong trường hợp này phản ứng JSON được bọc trong một hàm callback đặc biệt. Để làm việc này, máy chủ từ xa phải hỗ trợ nó. Kiểm tra tài liệu của API nếu trường hợp này xảy ra. Url ví dụ bạn đã hiển thị và hoạt động trong trình duyệt trả về JSON thuần túy.
  • Nếu máy chủ từ xa không hỗ trợ JSONP, nhưng chỉ gửi XML hoặc JSON, bạn sẽ phải viết một hành động điều khiển trên miền của mình sẽ đóng vai trò như cầu nối giữa miền của bạn và miền từ xa. Sau đó, bạn sẽ gửi yêu cầu AJAX đến hành động điều khiển này, lần lượt sẽ gửi một yêu cầu HTTP đến miền từ xa bằng cách sử dụng WebClient.
+0

Câu trả lời hay ... nó đã chỉ cho tôi đúng hướng. Bạn đã đúng khi đề xuất sử dụng JSonp. Bài đăng này chỉ cho tôi cách triển khai kết quả JSONP và bây giờ tôi đang nhận được Json của mình: [link] http://stackoverflow.com/questions/4795201/asp-net-mvc-3-jsonp-does-this-work- with-jsonvalueproviderfactory [/ link] Bạn đã tiết kiệm cho tôi rất nhiều giờ cảm ơn. Nếu bạn quan tâm, tôi sẽ cung cấp cho bạn một mẹo bitcoin trên [link] http://www.youtipit.org [/ link] (Lưu ý đây là trang web tôi đồng sáng lập để thưởng cho những người giúp đỡ người khác trực tuyến). Cảm ơn bạn lần nữa. – kSeudo

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