2011-07-28 25 views
8

Tôi cố gắng truy cập danh sách sharepoint qua giao diện Jquery và REST. Trang web có mã bên dưới đang chạy localhost.Truy cập JQuery Json của Danh sách chia sẻ thông qua phần còn lại

Mã này không làm việc:

$(document).ready(function() { getdata(); }); 

function getdata() { 

    alert("start"); 

    $.ajax({ 
     url: "http://spkerberostest.vz.ch/_vti_bin/ListData.svc/Tasks", 
     dataType: 'JSON', 
     success:function(json) { alert ("Success"); 
     }, 
     error:function(){ 
      alert("Error"); 
     } 
    });   
}; 

tôi nhận được thông báo lỗi "xứ http://localhost:59936 không được phép bởi Acess-Control-Allow-Origin."

Tôi không chắc lý do là gì. Có thực tế là Sharepoint cần xác thực (ẩn danh bị chặn) hay là cuộc gọi tên miền chéo? Hoặc thậm chí cả hai?

Tôi có thể làm gì? Tôi đã đọc ở đâu đó về JSONP dưới dạng Kiểu dữ liệu. Nhưng điều này không hiệu quả. Cảm ơn.

Trả lời

0

Bạn cần thay vì gọi máy chủ của riêng bạn, và sau đó yêu cầu máy chủ của bạn gọi máy chủ SharePoint. Giả sử rằng bạn đang sử dụng một C# trung cấp, nó sẽ giống như thế này:

public string getJson() 
    { 
     WebClient wc = new WebClient(); 
     wc.Credentials = new System.Net.NetworkCredential("[user]", "[password]", "[domain]"); 
     var url = "[some url in the 12 hive that can return json]"; 

     var result = wc.DownloadString(url); 

     return result; 
    } 

Tất nhiên bạn cần phải thêm mã cho outputting json lại cho khách hàng của bạn, nhưng các mã trên là làm thế nào bạn có thể nhận được dữ liệu SP bạn cần.

Cảm ơn,

Matt

6

Giả sử rằng cả hai nguồn lực nội bộ cho công ty của bạn, và bạn luôn truy cập vào một từ khác, quản trị Sharepoint của bạn có thể cố gắng để biến vào những gì được gọi là CORS (Cross Nguồn gốc chia sẻ) tiêu đề trên các máy chủ Sharepoint IIS.

Điều này sẽ cho phép các cuộc gọi có nguồn gốc chéo của bạn hoàn tất thành công, vì trình duyệt và máy chủ trao đổi các tiêu đề yêu cầu chia sẻ nguồn gốc chéo. Bạn có thể tìm hiểu thêm về CORS tại http://enable-cors.org/

Về câu trả lời của 3nigma. Cờ crossDomain của Jquery sẽ không hoạt động, bởi vì các dịch vụ Sharepoint không được thiết kế như các dịch vụ JSONP, đó là những gì Jquery cố gắng sử dụng khi bạn thiết lập cờ đó. (Các máy chủ Sharepoint sẽ phải pad dữ liệu như nó là một tập tin Javascript với một đối tượng JSON duy nhất trong nó, nhưng tôi không biết một cách để cấu hình nó để làm điều đó.)

0

Chỉ trong trường hợp bất cứ ai khác đang ghét vấn đề này, tôi đã làm việc này trong môi trường của mình bằng cách đặt jquery, suoport.cors thành true. mã là:

$.support.cors = true; 
$.ajax({ 
crosDomain:true,  
    url: listUrl, 
    success: getItemsSuccess, 
    error: jqueryError, 
    dataType:'json' 

}); 

điều này cho phép tôi truy cập danh sách trên máy chủ vật lý khác. Không yêu cầu thay đổi iis. Không cần JSONP.

+0

Điều đó sẽ chỉ hoạt động nếu CORS được bật trên mạng của bạn – Andrey

0
<script type="text/javascript"> 
$(document).ready(function() { getdata(); }); 

function getdata() { 

    alert("start"); 

    $.ajax({ 
     url: "http://yourserver/_api/Web/Lists/getByTitle('yourlist 
')/items/", 
     type: "GET", 
     headers: { 
      "accept": "application/json;odata=verbose", 
     }, 
     success:function(json) { alert ("Success"); 
     }, 
     error:function(){ 
      alert("Error"); 
     } 
    });   
}; 
</script> 
+0

Mã của bạn là gì, Vui lòng giải thích một chút về mã của bạn. –

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