2013-02-13 19 views
5

Tôi đang cố gắng gọi Petfinder.com để nhận danh sách vật nuôi của chúng tôi. Url là http://api.petfinder.com/shelter.getPets?key=xxxxx&id=CA1469&format=jsonJQuery ajax gọi nhận mã trạng thái 0 "lỗi"

Url dường như trả về tiền phạt JSON. Nhưng khi tôi cố gắng thực hiện cuộc gọi, tôi nhận được "lỗi" và mã trạng thái 0. Tôi đã thử sử dụng jsonp dẫn đến trạng thái 200 nhưng lỗi phân tích cú pháp. Nếu tôi thay đổi thành xml, tôi có kết quả là trạng thái 0 và "lỗi".

$.ajax({ 

     url: "http://api.petfinder.com/shelter.getPets?key=xxxx&id=CA1469&format=json", 
     dataType: "json", 
     type: "GET", 
     success: function (data) { 
      alert("hi"); 
     }, 
     error: function (jqXHR, exception) { 
      if (jqXHR.status === 0) { 
       alert('Not connect.\n Verify Network.'); 
      } else if (jqXHR.status == 404) { 
       alert('Requested page not found. [404]'); 
      } else if (jqXHR.status == 500) { 
       alert('Internal Server Error [500].'); 
      } else if (exception === 'parsererror') { 
       alert('Requested JSON parse failed.'); 
      } else if (exception === 'timeout') { 
       alert('Time out error.'); 
      } else if (exception === 'abort') { 
       alert('Ajax request aborted.'); 
      } else { 
       alert('Uncaught Error.\n' + jqXHR.responseText); 
      } 

     } 
    }); 
+1

Bạn có gặp lỗi 'Cùng nguồn gốc 'trong bảng điều khiển của mình không? Bạn đang sử dụng IE? Yêu cầu có nguồn gốc chéo cần phải được gửi dưới dạng JSONP (yêu cầu đáp ứng JSONP đúng) hoặc với CORS được bật, yêu cầu máy chủ hỗ trợ CORS và trình duyệt hỗ trợ CORS. jQuery không hỗ trợ CORS trong IE <10. –

+0

Thư viện ứng dụng API của Trello có một ví dụ tốt về cách chúng xử lý sự hỗ trợ của CORS: https://trello.com/1/client.coffee – forivall

+0

có thể trùng lặp với [Ajax jqXHR.status == 0 lỗi sửa lỗi] (http://stackoverflow.com/questions/23802474/ajax-jqxhr-status-0-fix-error) –

Trả lời

1

Bạn đang gặp sự cố XSS CORS. Giải pháp tốt nhất là thiết lập proxy trên máy chủ web của bạn và định tuyến cuộc gọi AJAX thông qua nó.

+1

Như KevinB đã đề cập; Tôi nghĩ bạn có nghĩa là CORS, chứ không phải XSS – Alexander

+0

@Alexander đồng ý. –

+0

Tôi đang sử dụng AWS Api Gateway cho ứng dụng của tôi ... và nhận được cùng một vấn đề này ... bạn có thể đề xuất chính sách CORS ưa thích để lỗi này được giải quyết hay không. Tôi đang thử nghiệm nó ryte bây giờ bằng cách sử dụng một cuộc gọi ajax đơn giản chạy trên sự kiện 'onload' của thẻ body –

2

Bạn cần đảm bảo rằng khi máy chủ gửi cho bạn phản hồi lỗi, nó cũng gửi các tiêu đề CORS phù hợp cùng với nó.

Nếu trình duyệt không phải không cho phép mã JavaScript của bạn nhìn thấy bất kỳ thông tin nào đến từ tên miền đó, kể cả mã trạng thái.