2013-03-08 34 views
17

Tôi có mã như thế này: tôi đang sử dụng giá trị Dữ liệu làm đối tượng theo nghĩa đen, thay vì ghép nối một Chuỗi. TẠI SAO? see hereThông báo: Nguyên thủy JSON không hợp lệ: phương thức jquery ajax với C# Webmethod

mã của tôi là thế này: -

$.ajax({ 
        url: "../Member/Home.aspx/SaveClient", 
        type: "POST", 
        async: false, 
        dataType: 'json', 
        contentType: 'application/json; charset=utf-8', 
        data: { 
         "projectSoid": ProjectId, 
         "startDate": StartDate, 
         "endDate": EndDate, 
         "clientManager": ClientManager 
        }, 
        success: function (response) { 
         if (response.d != "") { 

         } 
        }, 
        error: function (response) { 
         var r = jQuery.parseJSON(response.responseText); 
         alert("Message: " + r.Message); 
         alert("StackTrace: " + r.StackTrace); 
         alert("ExceptionType: " + r.ExceptionType); 
        } 
       }) 

và WebMethod là như thế này:

[WebMethod] 
     public static string SaveClient(string projectSoid, string startDate, string endDate, string clientManager) 
     {} 

Vấn đề là tôi đã nhận lỗi như thế này:

nhắn: không hợp lệ JSON nguyên thủy : projectSoid

+6

Bạn cần phải JSON.strigify dữ liệu của bạn: 'dữ liệu: JSON.strigify ({ " projectSoid ": ProjectId, " startDate ": StartDate, " endDate ": EndDate, " clientManager ": Clien tManager }), ' – nemesv

+0

Bất kỳ nhận xét nào về nhận xét của tôi? Bạn đã thử chưa? Nó có hoạt động không? – nemesv

+0

tôi không biết JSON là gì. tôi nhận được lỗi rằng nó không hoạt động: ( –

Trả lời

36

Với số contentType: 'application/json; charset=utf-8', bạn tuyên bố rằng bạn sẽ gửi JSON nhưng hiện tại thuộc tính data của bạn không giữ JSON.

Bạn cần phải chuyển đổi data của bạn để JSON với JSON.stringify phương pháp:

Vì vậy, thay đổi thuộc tính data của bạn để:

data: JSON.stringify({ 
    "projectSoid": ProjectId, 
    "startDate": StartDate, 
    "endDate": EndDate, 
    "clientManager": ClientManager 
}), 

Bạn nên lưu ý rằng phương pháp JSON.stringify không natively hỗ trợ trong các trình duyệt cũ quá bạn có thể cần cung cấp triển khai bằng cách sử dụng một trong các thư viện khác nhau như:

Douglas Crockford's JSON2 library.

+0

ok, cảm ơn tôi sẽ cố gắng :) –

+0

@nemesv: Cảm ơn Nemev: Chỉ cần một sửa trong mã của bạn ... U sai đánh vần là xâu thành chuỗi ... – Saravanan

+0

@NestorC: bạn có thể chấp nhận không đây là câu trả lời nếu nó đáp ứng nhu cầu của bạn? Vì vậy, nó sẽ giúp cho ai đó ... – Saravanan

1

Javascript ở bên cạnh khách hàng

var items = [{ projectSoid: ProjectId, startDate: StartDate, endDate: EndDate, clientManager: ClientManager }]; 


        $.ajax({ 
         url: '"../Member/Home.aspx/SaveClient', 
         type: "POST", 
         data: JSON.stringify({ items: items }), 

         //data: JSON.stringify("{DocKey : '" + DocKey + "',highlightText: '" + JSON.stringify(text) + "',pageNo: '" + pgNo + "',left: '" + left + "',top: '" + top + "',width: '" + width + "',height: '" + height + "'}"), 

         //data: "{DocKey\":\""+ DocKey+"\",\"highlightText\":\""+ text +"\",\"pageNo\":\""+pgNo+"\",\"left\":\""+left+"\",\"top\":\""+top+",\"width\":\""+width+"\",\"height\":\""+ height +"}}", 
         // data: "{DocKey : '" + DocKey + "',highlightText: '" + text + "',pageNo: '" + pgNo + "',left: '" + left + "',top: '" + top + "',width: '" + width + "',height: '" + height + "'}", 
         contentType: "application/json; charset=utf-8", 
         dataType: "json", 
         beforeSend: function() { 
          alert("Start!!! "); 
         }, 
         success: function (data) { 
          alert("Save data Successfully"); 
         }, 
         failure: function (msg) { alert("Sorry!!! "); evt.obj.deleteObject(); }, 
         async: false 

        }); 

Phương pháp Web tại Mã đằng sau

[WebMethod]  
public static string SaveClient(object items)  { 

    List<object> lstItems = new  JavaScriptSerializer().ConvertToType<List<object>>(items); 

    Dictionary<string, object> dic = (Dictionary<string, object>)lstItems[0]; 

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