2010-12-13 31 views
6

Tôi đang sử dụng hàm getJSON của JQuery để gọi các dịch vụ REST có sẵn trong SharePoint 2010. Mọi thứ dường như hoạt động tốt trừ khi dữ liệu SharePoint chứa dấu nháy đơn. Khi dữ liệu chứa một dấu nháy đơn, cuộc gọi lại trong cuộc gọi getJSON sẽ không thực thi.JQuery getJSON Fails trên SharePoint REST Dữ liệu chứa Apostrophe

Trong dữ liệu được trả về từ SharePoint, các dấu nháy xuất hiện với dấu "\". Dấu nháy đơn và các ký tự khác dường như không tạo ra vấn đề.

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

Có ai khác đã gặp phải bất kỳ điều gì như thế này không?

Trả lời

7

Khi điều tra thêm, tôi nghĩ rằng tôi đã tìm thấy sự cố. Tôi đã tạo một danh sách đơn giản với một mục duy nhất có số Kiểm tra ' làm giá trị cho trường tiêu đề. Dấu nháy ở cuối minh họa vấn đề. SharePoint dường như thoát khỏi dấu nháy đơn trong giá trị JSON trả về:

{ "d": { "Kết quả": [{ "__metadata": { "uri": "http: /// /_vti_bin/listdata.svc/JSONTest(1) "," etag ":" W/\ "2 \" "," nhập ":" Microsoft.SharePoint.DataService.JSONTestItem " }," Id ": 1," ContentTypeID ":" 0x0100AC5DC67105487A4B87E86D93A3276612 "," Loại nội dung ":" Mục "," Tiêu đề ": " Kiểm tra \ '"," Đã sửa đổi ":" \/Ngày (1292244302000) \/"," Đã tạo ":" \/Ngày (1292244205000) \/"," CreatedBy ": { " __deferred ": { " uri ":" http: ////_vti_bin/listdata.svc/JSONTest (1)/CreatedBởi " } . . .

Dường như một dấu nháy đơn không phải là một nhân vật có giá trị để thoát khỏi trong JSON mỗi spec JSON:

RFC 4627 JSON Tháng bảy 2006

Các đại diện của chuỗi tương tự như công ước được sử dụng trong C ngôn ngữ lập trình. Chuỗi bắt đầu và kết thúc bằng dấu ngoặc kép. Tất cả các ký tự Unicode có thể được đặt trong dấu ngoặc kép trừ các ký tự phải được thoát ra: dấu ngoặc kép, đảo ngược gạch chéo ở cuối, và các ký tự điều khiển (U + 0000 qua U + 001F)

Sử dụng ajaxError chức năng tôi đã nhận được một thông báo cho biết JSON không hợp lệ.

Để giải quyết tình huống này, bạn có thể thực hiện một số việc như sau. Tôi đã sử dụng plugin mẫu jQuery (tmpl) để định dạng các kết quả JSON. Một số xử lý lỗi nữa cũng cần thiết để xử lý thêm các lỗi phân tích cú pháp JSON có thể xảy ra.

$.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 Cảm ơn bạn đã nêu chi tiết vấn đề. Tôi đã làm một vài thử nghiệm dường như để xác nhận nó. – Christophe

2

Điều này nghe lạ ... Cách sử dụng $.get() thay vì $.getJSON(), sau đó xoa bóp phản hồi thành dạng JSON thích hợp và cuối cùng sử dụng $.parseJSON() để nhận đối tượng JSON.

+0

Cảm ơn bạn đã trả lời. Tôi sẽ cần làm sạch phản hồi trước khi phân tích cú pháp như bạn đã đề xuất. –

0

Hãy thử plugin jQuery SPServices, rất tiện dụng và dễ sử dụng, điều duy nhất là nó trả về dữ liệu XML.

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