2011-10-12 114 views
0

当我尝试从Web服务获取JSON我得到(状态==“parsererror”)这意味着“无法解析JSON响应”。我究竟做错了什么。无法解析JSON响应。 JQUERY

MyService.asmx:

[WebMethod] 
     public AssignmentInfo[] GetAssignmentInfo(int insId) 
     { 
      Proxies.ServiceRef.ServiceClient c = new Proxies.ServiceRef.ServiceClient(); 
      return c.GetAssignmentInfo(Id).ToArray(); 
     } 

在.aspx页面中的jQuery实现。

this.ServiceProxy = function (serviceUrl) { 
     var _I = this; 
    this.serviceUrl = serviceUrl; 
    this.isWcf = false; 
    this.timeout = 10000; 
    this.contentType = "application/json"; 

    this.invoke = function (method, params, callback, errorHandler) { 
    var jsonData = _I.isWcf ? JSON.stringifyWcf(params) : JSON.stringify(params); 

     // Service endpoint URL   
     var url = _I.serviceUrl + method; 

     $.ajax({ 
      url: url, 
      data: jsonData, 
      type: "POST", 
      contentType: _I.contentType, 
      timeout: _I.timeout, 
      dataType: "serviceproxy", // custom type to avoid double parse 
      dataFilter: function (jsonString, type) { 
       if (type == "serviceproxy") { 
        // Use json library so we can fix up dates   
        var res = JSON.parseWithDate(jsonString); 
        if (res && res.hasOwnProperty("d")) 
         res = res.d; 
        return res; 
       } 
       return jsonString; 
      }, 
      success: function (result) { 
       if (callback) 
        callback(result); 
      }, 
      error: function (xhr, status) { 
       var err = null; 
       if (xhr.readyState == 4) { 
        var res = xhr.responseText; 
        if (res && res.charAt(0) == '{' && status != "parsererror") 
         var err = JSON.parse(res); 
        if (!err) { 
         if (xhr.status && xhr.status != 200) 
          err = new CallbackException(xhr.status + " " + xhr.statusText); 
         else { 
          if (status == "parsererror") 
           status = "Unable to parse JSON response."; 
          else if (status == "timeout") 
           status = "Request timed out."; 
          else if (status == "error") 
           status = "Unknown error"; 
          err = new CallbackException("Callback Error: " + status); 
         } 
         err.detail = res; 
        } 
       } 
       if (!err) 
        err = new CallbackException("Callback Error: " + status); 

       if (errorHandler) 
        errorHandler(err, _I, xhr); 
      } 
     }); 
    } 
} 


var serviceUrl = "service/MyService.asmx/"; 
var proxy = new ServiceProxy(serviceUrl); 

function showAssignInfo() { 

      proxy.invoke("GetAssignmentInfo", 
      { insId: $("#IAssignmentId").val() }, 
      function (result) {    
        $.each(result, function (index) { 

        alert (this.ClaimId); 

       }); 
      }, onPageError); 

更新1:

JSON响应:

{"d":[{"__type":"Proxies.AFARServiceRef.AssignmentInfo","ExtensionData":{},"AssignDate":"\/Date(1317748587667)\/","AssignFileName":null,"ClaimId":"PA026195","ClaimantName":"Rachel Weiss","FirstContactDate":"\/Date(1302678000000)\/","FirstContactTime":{"Ticks":433800000000,"Days":0,"Hours":12,"Milliseconds":0,"Minutes":3,"Seconds":0,"TotalDays":0.50208333333333333,"TotalHours":12.049999999999999,"TotalMilliseconds":43380000,"TotalMinutes":723,"TotalSeconds":43380},"Id":5257,"InspectionDate":"\/Date(1302246000000)\/","StatusId":1,"SubmittedCount":5,"UploadedCount":9}]} 
+2

您可以张贴JSON响应 – Rafay

回答

1

尝试

[WebMethod] 
[WebGet(ResponseFormat=WebMessageFormat.Json)] 
     public AssignmentInfo[] GetAssignmentInfo(int insId) 
     { 
      Proxies.ServiceRef.ServiceClient c = new Proxies.ServiceRef.ServiceClient(); 
      return c.GetAssignmentInfo(Id).ToArray(); 

     } 

enter image description here

+0

我猜你的意思是回报GetAssignmentInfo是字符串。如果是这样,当我调试我得到一个字符串“System.Collections.Generic.List'1 [Proxies.ServiceRef.AssignmentInfo]”到strJSON不是实际的数据。 – BumbleBee

+0

当你不使用javascriptSerializer时,你可以发布你得到的json响应(在firebug中)吗?这将会提供更清晰的画面。我猜JSON格式不正确 – Rafay

+0

看到编辑也许它会帮助 – Rafay