JQueryを介してクライアント側からサーバー側のメソッドを呼び出そうとしています。私のコードは次のとおりです。
サーバ側:
using System.Web.Services;
[WebMethod()]
//[ScriptMethod()]
public static void SendMessage(string subject, string message, string messageId, string pupilId)
{
//Send message
}
クライアント側:
$("#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;
});
サーバー側のSendMessageメソッドにブレークポイントを追加しましたが、ヒットすることはありませんが、コードを実行するとjQuery成功メソッドが呼び出されます。何がこれを引き起こしているのでしょうか?
ASP.NET AJAX "ScriptServices"およびページメソッドを呼び出すには、完全な$ .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.
}
});
それが必要な理由の詳細については、この投稿を参照してください: http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/
編集:拡張子は.asmxに変更されませんが、.aspxのままです。
ページメソッドを利用しようとしているようです。
こちらをご覧ください ASP.NET Ajaxのページメソッド ヘルプ
$.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); }
});
これが機能しない場合...および「構文エラー:構文エラー」が表示される場合...
<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>
の間に </compilation>
および</system.web>
Web.Configファイル内。
これがjquery関数の横にあるWeb.Configに追加する必要があることを理解するのに時間がかかったので、これが誰かを助けることを願っています。
通常のaspx Webページの代わりにWebサービスを使用する必要があります。 WebページはWebメソッドの呼び出しをサポートしていません。代わりに、jQueryリクエストがHTMLページをロードすると考えています。 2つのことをお勧めします。
以下は、あなたの状況で機能するコードです。
<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);
}
私のためにいつも働いている例があります。
完全な記事はこちら http://www.webdeveloperpost.com/Articles/How-to-use-jquery-ajax-in-asp-dot-net-web-page.aspx
Jquery asp.netメソッドのコールバックを使用する直接的な方法が必要な場合に適しています