2013-11-01 79 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