2010-12-13 14 views
6

Sto utilizzando la funzione getJSON di JQuery per chiamare i servizi REST disponibili in SharePoint 2010. Tutto sembra funzionare correttamente, a meno che i dati di SharePoint non contengano un apostrofo. Quando i dati contengono un apostrofo, la richiamata all'interno della chiamata getJSON non verrà eseguita.JQuery getJSON non riesce nei dati REST di SharePoint contenenti Apostrofo

Nei dati restituiti da SharePoint, gli apostrofi sembrano essere sfuggiti con una "\". Citazioni singole e altri personaggi non sembrano creare il problema.

$(document).ready(function() { 
    $.getJSON(
     "http://<server>/<site>/_vti_bin/listdata.svc/Tasks", null, 
     function (data) { 
      alert("Function called");     
     }); 
}); 

Qualcun altro ha riscontrato qualcosa di simile?

risposta

7

Su ulteriori indagini, penso di aver trovato il problema. Ho creato un elenco semplice con un singolo elemento con Test ' come valore per il campo del titolo. L'apostrofo alla fine illustra il problema. SharePoint sembra sfuggire l'apostrofo nel valore JSON restituito:

{ "D": { "risultati": [{ "__metadata": { "uri": "http: /// /_vti_bin/listdata.svc/JSONTest(1) "," etag ":" W/\ "2 \" "," tipo ":" Microsoft.SharePoint.DataService.JSONTestItem " }," ID ": 1," ContentTypeID ":" 0x0100AC5DC67105487A4B87E86D93A3276612 "," ContentType ":" Elemento "," Titolo ": " Test \ "", "Modificato": "\/Data (1292244302000) \ /", "Creato": "\/Data (1292244205000) \/"," CreatedBy ": { " __deferred ": { " uri ":" http: ////_vti_bin/listdata.svc/JSONTest (1)/CreatedBy " } . . .

Sembra che un apostrofo non è un carattere valido per fuggire in JSON per la specifica JSON:

RFC 4627 JSON luglio 2006

La rappresentazione di stringhe è simile a convenzioni utilizzate in la famiglia di linguaggi di programmazione C . Una stringa inizia e termina con virgolette . Tutti i caratteri Unicode possono essere collocati entro i virgolette, ad eccezione per i personaggi che devono essere sfuggiti: virgolette, Solidus invertire, ed i caratteri di controllo (U + 0000 tramite U + 001F)

Utilizzando l'ajaxError funzione Ho ricevuto un messaggio che diceva che JSON non era valido.

Per far fronte a questa situazione, è possibile fare qualcosa di simile al seguente. Ho usato il plugin per template JQuery (tmpl) per formattare i risultati JSON. È necessaria anche un'altra gestione degli errori per gestire ulteriori possibili errori di analisi JSON.

$.ajax({ 
     url: "http://<server>/<site>/_vti_bin/listdata.svc/<list>", 
     dataType: "json", 
     success: function(data) {         
      //alert("successful");     
      $("#templateID").tmpl(data.d.results).appendTo("#elementID"); 
     }, 
     error: function(data) { 
      //alert("error"); 
      var sCleanJSON = data.responseText.replace(/\\'/g,"'"); 
      var objJSON = $.parseJSON(sCleanJSON); 
      $("#templateID").tmpl(objJSON.d.results).appendTo("#elementID"); 
     }   
    }); 
+1

+1 Grazie per aver dettagliato il problema. Ho fatto un paio di test che sembrano confermarlo. – Christophe

2

Questo sembra strano ... Che ne dici di utilizzare $.get() anziché $.getJSON(), quindi massaggiare la risposta nel modulo JSON corretto e infine utilizzare $.parseJSON() per ottenere l'oggetto JSON.

+0

Grazie per la risposta. Avrò bisogno di ripulire la risposta prima di analizzarla come suggerito. –

0

Provare il plugin jQuery SPServices, molto utile e facile da usare, l'unica cosa è che restituisce dati XML.

Problemi correlati