2011-07-28 23 views
8

Intento acceder a una lista de sharepoints mediante Jquery y la interfaz REST. El Sitio con el siguiente código está ejecutando localhost.JQuery Json Acceso de una lista de Sharepoint a través de Rest

Este código no funciona:

$(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"); 
     } 
    });   
}; 

me sale el mensaje de error "Origen http://localhost:59936 no está permitido por Acess-Control-Allow-Origin."

No estoy seguro de cuál es la razón. ¿Es el hecho de que Sharepoint necesita Autenticación (el anónimo está bloqueado) o es una llamada entre dominios? ¿O incluso los dos?

¿Qué puedo hacer? Leí en algún lugar sobre JSONP como tipo de datos. Pero esto no funcionó. Gracias.

Respuesta

0

En su lugar, debe llamar a su propio servidor y hacer que su servidor llame al servidor de SharePoint. Suponiendo que usted está usando un C# de nivel medio, se vería algo como esto:

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; 
    } 

Por supuesto es necesario agregar código para dar salida a la JSON de nuevo a su cliente, pero el código anterior es cómo puede obtener los datos SP que necesita

Gracias,

Matt

6

Suponiendo que ambos recursos son internos a su empresa, y siempre se accede a una de la otra, el administrador de SharePoint podrían tratar de convertir en lo que se llama CORS (Cruz Encabezados de Compartir recursos de origen) en los servidores Sharepoint IIS.

Esto permitirá que sus llamadas de origen cruzado se completen con éxito, ya que el navegador y los servidores intercambian encabezados que solicitan el intercambio de origen cruzado. Puede obtener más información acerca de CORS en http://enable-cors.org/

En cuanto a la respuesta de 3nigma. El distintivo de CrossDomain de Jquery no funcionará, porque los servicios de Sharepoint no están diseñados como servicios JSONP, que es lo que Jquery intenta usar cuando configura ese indicador. (El servidor Sharepoint debería rellenar los datos como si fuera un archivo Javascript con un solo objeto JSON, pero no conozco una forma de configurarlo para hacerlo).

0

Por las dudas de cualquier otra persona está haciendo referencia a este problema, lo hice funcionar en mi entorno estableciendo el jquery, suoport.cors en verdadero. el código es:

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

}); 

esto me permite acceder a una lista en otro servidor físico. No se requirieron cambios a iis. No se necesita JSONP.

+0

Eso sólo funcionaría si CORS está habilitado en su red – 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

Lo que hace el código no, favor explicar un poco acerca de su código. –

Cuestiones relacionadas