2014-11-26 19 views
9

Tôi đã sử dụng ứng dụng AngularJS trong đó tôi đang cố gắng lấy dữ liệu XML với $ http lấy từ máy chủ nói http://example.com/a/b/c/d/getDetails?fname=abc&lname=def (điều này khi được truy cập bằng tay bằng cách nhập liên kết trong trình duyệt hiển thị cấu trúc cây của tệp XML).

Khi tôi chạy ứng dụng, dữ liệu từ liên kết đó không được tìm nạp. Thay vào đó, nó hiển thị lỗi với trạng thái .

//url = http://example.com/a/b/c/d/getDetails?fname=abc&lname=def 
$http.get(url).success(function (data){ 
       alert("Success"); 
       deferred.resolve(data); 
      }).error(function (data, status){ 
       console.log("Error status : " + status); 
      }); 

Tôi không chắc chắn lý do tại sao $ http.get thất bại và đi vào hàm lỗi trở về tình trạng 0.

Nhưng nếu tôi vượt qua một URL đến máy chủ địa phương trong đó có một đối tượng JSON, nó công trinh.

Vấn đề là vì tôi đang cố gắng truy cập tệp XML từ một tên miền khác (vấn đề CORS?) Hoặc cái gì khác?

Hãy giúp tôi!

+0

Có, hãy xem bảng điều khiển của bạn, bạn sẽ gặp lỗi (Cross Origin ...) –

+1

Không. Tôi đã không có bất cứ điều gì như thế trong giao diện điều khiển của tôi. – kumareloaded

+0

Điều gì sẽ xảy ra nếu tôi không muốn kiểm soát lỗi đăng nhập nhưng trả lại lỗi cho DOM? – mdarmanin

Trả lời

16

Bạn có HTTP access control (CORS) vấn đề này.

Máy chủ trả lời các yêu cầu REST của bạn PHẢI bao gồm các tiêu đề được chỉ định bởi CORS để cho phép Angular sử dụng đúng cách phản hồi. Về cơ bản, điều này có nghĩa là bao gồm tiêu đề Access-Control-Allow-Origin trong phản hồi của bạn, chỉ định các máy chủ từ nơi yêu cầu đến, được cho phép. (ref)

Có chỉ thị Angular cho phép người dùng nhận/đặt danh sách trắng và danh sách đen được sử dụng để đảm bảo rằng URL được sử dụng để tìm nguồn cung cấp mẫu góc được an toàn.

+0

Vì vậy, sẽ đủ nếu tôi đưa vào danh sách trắng liên kết tôi sử dụng để truy cập dữ liệu XML? – kumareloaded

+0

Nếu bạn sử dụng xmlhttprequests bạn cần JSONpadding. Tuy nhiên, máy chủ phải hỗ trợ "Chia sẻ tài nguyên gốc (CORS)" trong trường hợp này, việc nhận dữ liệu từ một tên miền khác thật đơn giản. – KByK

2

bạn đã hiểu đúng, vì loại nội dung mặc định cho $ http là “application/json” nếu bạn muốn thay đổi dữ liệu yêu cầu hoặc dữ liệu phản hồi, bạn có thể thay đổi nó với sự trợ giúp của tranformRequest và tranformResponse. bạn có thể tìm thêm thông tin về nó here

cũng tôi thấy một bài viết về thi hành tranformRequest change post data from json to form post in angularjs

+0

Cảm ơn. Vì vậy, đối với ứng dụng của tôi sau khi sử dụng transformRequest, tôi có nên sử dụng xml2json để chuyển đổi nội dung xml thành JSON và sử dụng nó không? (http://rabidgadfly.com/2013/02/angular-and-xml-no-problem/) hoặc có giải pháp nào tốt hơn cho điều này? – kumareloaded

+0

liên kết của bạn đang chuyển hướng đến các trang web spam – tylerlindell

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