2013-11-01 12 views
5

Ich versuche, einen einfachen Jquery Ajax-Aufruf an eine WEB-API-Methode zu machen.Jquery Ajax Aufruf an 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 Aktion:

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

Ajax-Aufruf API nicht die WEB nicht zu schlagen. Ich erhalte den folgenden Fehler in der Browser-Konsole.

GET http://redrock.com:6606/api/values/get?callback=jQuery18207315279033500701_1383300951840&_=1383300951850 400 (Bad Request)

Antwort

2

Sie haben den Code für die Route-Setup enthalten, aber vorausgesetzt, es richtig ist, wird das Problem wahrscheinlich durch die Tatsache, dass Sie Sie genannt haben WebAPI Methode ‚Get 'während Sie versuchen, es mit einer POST-Anfrage zu treffen. Dies geschieht, weil WebApi versucht, das HTTP-Verb aus dem Aktionsnamen herauszufinden.

Ich würde vorschlagen, entweder die Aktion umzubenennen oder das [HttpPost] Attribut zu Ihrer Aktionsmethode hinzuzufügen. Sie können auch das WebApiRouteDebugger Paket versuchen.

+0

Ich versuchte mit HttPost, aber kein Glück – chamara

2

Sofern Sie keinen domainübergreifenden Aufruf durchführen, müssen Sie jsonp nicht verwenden (jsonp benötigt außerdem einen benutzerdefinierten Formatierer in der Web-API).

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

EDIT:

einen JSONP Medientyp Formatierer zu installieren, einen Blick auf dieses Projekt haben: https://github.com/WebApiContrib/WebApiContrib.Formatting.Jsonp

  • die Formatierungs Herunterladen mit nuget
  • Registrieren Sie den Formatierer
  • -Update Ihr routconfig
+0

Hallo! Ich muss einen domänenübergreifenden Anruf tätigen – chamara

+0

Gibt Ihre API Daten zurück, wenn Sie eine reguläre Nachricht von derselben Domäne abrufen, und haben Sie einen Medientyp-Formatierer für jsonp eingerichtet? – Francis

+0

es funktioniert, wenn ich die URL als "/ Controller/Aktion" in der gleichen Domäne und Datentyp wie 'Json' verwenden. Ich habe keine Ahnung von Jsonp Formatierer – chamara