2013-11-01 64 views
5

我正在尝试对Web API方法进行简单的jquery ajax调用。Jquery Ajax调用WEB API

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
<script type="text/javascript"> 

    $(document).ready(function() { 

     $.ajax({ 
      type: 'POST', 
      url: 'http://redrock.com:6606/api/values/get', 

      dataType: "jsonp", 

      crossDomain: true, 
      success: function (msg) { 

       alert("success"); 

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

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

</script> 

WEB API动作:

public IEnumerable<string> Get() 
    { 
    return new string[] { "value1", "value2" }; 
    } 

Ajax调用不打的WEB API。浏览器控制台中出现以下错误。

GET http://redrock.com:6606/api/values/get?callback=jQuery18207315279033500701_1383300951840&_=1383300951850 400(错误请求)

回答

2

您还没有为路由设置的代码,但假设它是正确的,问题可能是由一个事实,即你命名你的WebAPI方法“获取引起',而你正尝试使用POST请求击中它。发生这种情况是因为WebApi试图从操作名称中找出HTTP动词。

我会建议重新命名操作或将[HttpPost]属性添加到您的操作方法。您也可以尝试WebApiRouteDebugger包。

+0

我试过用HttPost但没运气 – chamara

2

除非您正在进行跨域调用,否则不需要使用jsonp(jsonp还需要Web API中的自定义格式化程序)。

$.getJSON('http://redrock.com:6606/api/values', function(data){ 
    console.log(data); 
}); 

编辑:

要安装JSONP媒体类型格式,看看这个项目:https://github.com/WebApiContrib/WebApiContrib.Formatting.Jsonp

  • 使用的NuGet
  • 注册格式化
  • 更新下载格式化您的路由配置
+0

嗨!我需要进行跨域调用 – chamara

+0

当您从同一个域进行常规获取时,API是否会返回数据,并且您是否为jsonp设置了媒体类型格式化程序? – Francis

+0

当我在与'json'相同的域和数据类型中使用URL作为“/ controller/action”时,它正在工作。我不知道jsonp格式化程序 – chamara