2013-11-04 46 views
2

我试图从WEB API调用中检索JSON结果。使用WEB API的Ajax Jquery请求

我的WEP API方法:

[AcceptVerbs("GET", "POST")] 
    public object GetTest() 
    { 
     rep = new ChatRepository(); 
     chatBoxCLS box = rep.Chatrequest(chatRequestLevel.Parent, null); 

     System.Web.Mvc.JsonResult jsonResult = new System.Web.Mvc.JsonResult 
     { 
      Data = box, 
      JsonRequestBehavior = System.Web.Mvc.JsonRequestBehavior.AllowGet 
     }; 


     return jsonResult.Data; 
    } 

我已经修改,如下WebapiConfig.cs,所以它总是返回JSON

config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{action}/{id}", 
      defaults: new { action = "get", id = RouteParameter.Optional } 
     ); 

      var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml"); 
      config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType); 

下面是我的Jquery Ajax调用:

<script type='text/javascript'> 

    $(document).ready(function() { 

     $.ajax({ 
      type: 'GET', 
      url: 'http://localhost:6606/api/values/GetTest', 

      dataType: 'json', 

      crossDomain: true, 
      success: function (msg) { 

       alert('success'); 

      }, 
      error: function (request, status, error) { 

       alert('error'); 
      } 
     }); 
    }); 

</script> 

它总是以错误警报告终。没有从WEB API接收数据。我试过调试,发现我的请求成功地访问了WEB API方法并返回JSON。以下是它返回的JSON数据。

{ “LISTOFITEMS”:[{ “ID”:14, “说明”: “新 试验”, “display_number随后”:1},{ “ID”:4 “描述”: “运行” “display_number随后”:2},{ “ID”:3 “描述”: “销售”, “display_number随后”:3},{ “ID”:5 “描述”: “技术”, “display_number随后”:4 }],“reply”:null,“history”:null,“Initialhistory”:null,“Question”:“”“chatids”:null,“displayNum”:null}

为什么我不是在客户端获得任何结果?

+0

我想这是因为你只返回'的Json Data'不包括'JsonRequestBehavior'使其无法正常工作的问题已获得解决取得要求? – WannaCSharp

+0

@WannaCSharp我试图与返回新System.Web.Mvc.JsonResult() { 数据= jsonResult.Data, JsonRequestBehavior = System.Web.Mvc.JsonRequestBehavior.AllowGet };但没有工作 – chamara

+0

你可以尝试看浏览器控制台,如果它给出任何错误? – WannaCSharp

回答

3

我通过添加访问控制允许来源以响应头

public class CrossDomainActionFilter : ActionFilterAttribute 
    { 
     public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) 
     { 
      bool needCrossDomain = true; 

      if (needCrossDomain) 
      { 
       actionExecutedContext.Response.Headers.Add("Access-Control-Allow-Origin", "*"); 
      } 

      base.OnActionExecuted(actionExecutedContext); 
     } 
    } 


[AcceptVerbs("GET", "POST")] 
[CrossDomainActionFilter] 
    public object GetTest() 
    { 
     rep = new ChatRepository(); 
     chatBoxCLS box = rep.Chatrequest(chatRequestLevel.Parent, null); 

     System.Web.Mvc.JsonResult jsonResult = new System.Web.Mvc.JsonResult 
     { 
      Data = box, 
      JsonRequestBehavior = System.Web.Mvc.JsonRequestBehavior.AllowGet 
     }; 


     return jsonResult.Data; 
    }