J'essaie d'appeler une méthode côté serveur du côté client via jQuery. Mon code est le suivant:
Du côté serveur:
using System.Web.Services;
[WebMethod()]
//[ScriptMethod()]
public static void SendMessage(string subject, string message, string messageId, string pupilId)
{
//Send message
}
Côté client:
$("#btnSendMessage").live("click", function(){
var subject = $("#tbSubject").val();
var message = $("#tbMessage").val();
var messageId = $("#hdnMessageId").val();
var pupilId = $("#hdnPupilId").val();
$.ajax({
type: "POST",
url: "./MessagePopup.aspx/SendMessage",
data: ("subject=" + subject + "&message=" + message + "&messageId=" + messageId + "&pupilId=" + pupilId),
error: function(XMLHttpRequest, textStatus, errorThrown){
alert(textStatus);
},
success: function(result){
alert("success");
}
});
return false;
});
J'ai ajouté un point d'arrêt sur la méthode SendMessage côté serveur, mais il ne le frappe jamais, mais lorsque j'exécute le code, la méthode de réussite jQuery est appelée. Qu'est-ce qui pourrait causer cela?
Pour appeler ASP.NET AJAX "ScriptServices" et les méthodes de page, vous devez utiliser la syntaxe complète de $ .ajax ():
$.ajax({
type: "POST",
url: "MessagePopup.aspx/SendMessage",
data: "{subject:'" + subject + "',message:'" + message + ",messageId:'" + messageId + "',pupilId:'" + pupilId +"'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
// Do something interesting here.
}
});
Voir cet article pour plus de détails sur les raisons pour lesquelles cela est nécessaire: http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/
Modifier: l'extension ne change pas en .asmx mais reste .aspx.
Il semble que vous essayiez d'utiliser une méthode de page.
Jetez un œil ici Méthodes de page dans ASP.NET Ajax pour obtenir de l'aide
$.ajax({
type: "POST",
url: "MessagePopup.aspx/SendMessage",
data: "{subject:'" + subject + "',message:'" + message + ",messageId:'" + messageId + "',pupilId:'" + pupilId +"'}",
async: true,
cache: false,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function() {},
error:function (xhr, ajaxOptions, thrownError){ alert(thrownError); }
});
Si cela ne fonctionne pas ... et donne "Erreur de syntaxe: erreur de syntaxe" ... alors ajoutez ceci
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory,
System.Web.Extensions, Version=3.5.0.0, Culture=neutral,
PublicKeyToken=31BF3856AD364E35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory,
System.Web.Extensions, Version=3.5.0.0, Culture=neutral,
PublicKeyToken=31BF3856AD364E35"/>
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler,
System.Web.Extensions, Version=3.5.0.0, Culture=neutral,
PublicKeyToken=31BF3856AD364E35" validate="false"/>
</httpHandlers>
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions,
Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>
entre </compilation>
et </system.web>
dans votre fichier Web.Config.
J'espère que cela aidera quelqu'un, car il m'a fallu un certain temps pour comprendre qu'à côté de la fonction jquery, je dois ajouter cela dans Web.Config.
Vous devez utiliser le service Web au lieu de la page Web aspx standard. Les pages Web ne prennent pas en charge les méthodes Web, je pense que votre requête jQuery charge la page HTML à la place. Je vous suggère deux choses:
Voici le code qui pourrait fonctionner dans votre situation.
<script type="text/javascript">
$(document).ready(function () {
// Add the page method call as an onclick handler for the button.
$("#btnSubmit").click(function () {
//get the string from the textbox
$.ajax({
type: "POST",
url: "testSearch.aspx/GetMyShippingDate",
contentType: "application/json; charset=utf-8",
data: "{'tracking_num': '" + $("#txtTrackingNumber").val() + "'}",
dataType: "json",
success: function (date) {
// Replace the div's content with the page method's return.
Success(date);
},
error: Failed
});
});
});
function Success(result) {
$("#ParcelShippingDate").html(result.d);
}
function Failed(result) {
alert(result.status + " " + result.statusText);
}
Il y a un exemple qui a toujours fonctionné pour moi.
Voici l'article complet http://www.webdeveloperpost.com/Articles/How-to-use-jquery-ajax-in-asp-dot-net-web-page.aspx
Cela fonctionne bien pour ceux qui veulent un moyen simple d'utiliser la méthode jquery asp.net call back