J'ai une application web MVC 3 qui a une Action à laquelle je dois accéder depuis une application webform via javascript.
Mon action retourne un résultat Json, qui fonctionne parfaitement. Cependant, lorsque j'y accède avec javascript depuis une autre application, je vois qu'elle atteint mon action, fait tout le travail, renvoie mes données, mais la fonction jquery me renvoie alors une erreur 200 et aucune donnée.
Exemple : Mon action MVC :
public ActionResult GetData(int categoryId)
{
var listofSeries = new List
{
"foo1",
"foo2",
"foo3"
};
return Json(listofSeries, JsonRequestBehavior.AllowGet);
}
Cela me renvoie : ["foo1","foo2","foo3"]
Normalement, ma fonction javascript est utilisée pour interroger une base de données et récupérer des données pour un graphique Highcharts, mais j'ai le même problème avec ce genre d'exemple.
$(document).ready(function () {
var foo = getData(9);
});
function getData(categoryId) {
var results;
$.ajax({
type: 'POST',
url: 'http://localhost:xxxx/Home/GetData',
//contentType: "application/json; charset=utf-8;",
async: false,
data: { "categoryId": categoryId },
dataType: "json",
success: function (data) {
console.log("results: " + data);
results = data;
}
});
return results;
}
Avec cela j'obtiens :
http://localhost:63418/Home/GetData?categoryId=9 200 OK
results: null
Si j'ajoute le contentType, je ne peux même pas voir la fonction s'exécuter dans la console firebug, tout ce que je vois est results: null
. Quand je le supprime, je le vois mais j'obtiens l'erreur ci-dessus.
On m'a dit que cela pourrait ne pas être faisable à cause de "Cross-site scripting". Et plutôt avoir ma fonction javascript appeler un webservice (ou un gestionnaire mais je n'ai pas encore bien compris comment en créer un) qui appellera ensuite mon action, renverra mes données au service qui les renverra ensuite aux données au javascript.
Mais maintenant j'obtiens un message d'erreur 415 Unsupported Media Type lors de la tentative de connexion à mon webservice.
Mon IWebService.cs :
[ServiceContract]
public interface IWebService
{
[OperationContract]
[WebInvoke(ResponseFormat = WebMessageFormat.Json, Method = "POST")]
void GetData(int mileId);
}
Mon WebService.svc :
public void GetData(int categoryId)
{
string url = "http://localhost:63418/Home/GetWoWData?categoryId=" + categoryId;
WebRequest wr = WebRequest.Create(url);
WebResponse response = wr.GetResponse();
}
Je ne retourne encore rien, cela n'ira même pas dans cette fonction. Il me donne le message d'erreur 415.
Si je change le contentType en "text/xml" j'obtiens une erreur 400.
J'aimerais vraiment que cela fonctionne sans utiliser le webservice, et comprendre pourquoi j'obtiens une erreur 200 OK quand je vois l'action s'exécuter, mais si ce n'est pas possible, avez-vous une idée pourquoi le webservice ne fonctionne pas ?
Merci.