2012-11-16 14 views
5

ここでは長時間のWinFormプログラマーが、Webプログラミングシーンでは初めてです。私はVisual Studio 2010を持っており、新しいWebSiteプロジェクトを作成しました。 私は作成したWebメソッドを呼び出すためにajaxを取得することはできません。ページ上の自分のボタンをクリックすると何も起こりません。javascript関数からjqueryによってWebメソッドが呼び出されない

WebSiteプロジェクトを作成すると、jquery 1.4.1がScriptsフォルダに自動的に追加されるようです。私は2個のスクリプトタグを追加Default.aspxので

<script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script> 
<script language="javascript" type="text/javascript" src="Scripts/Process.js"> 

を私はonclickの機能がProcess.jsに定義されている場所にページ上のボタンを配置:プロセスで

<input id="btnTest" type="button" value="Test" onclick="btnTest_onclick()" /> 

を。 Default.aspx.csで

function btnTest_onclick() { 

    var strData = JSON.stringify({ 
     userid: 5 
    }); 

    alert(strData); 

    $.ajax({ 
     url: 'Default.aspx/GetData', 
     type: "POST", 
     data: strData, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: Success, 
     failure: Failure, 
     async: true 
    }); 
} 

function Success(data) { 
    alert("success"); 
} 

function Failure(data) { 
    alert("failure"); 
} 

:JS私は、次のコードを持っている

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    [WebMethod()] 
    public static string GetData(int id) 
    { 
     return "hello, my id is " + id; 
    } 
} 
+0

あなたが知っている...することができます最新の安定バージョンのjQueryを取得(またはそれを行うためにUIを使用し、あるいはスクリプトを置き換えることによって、それを手動で行うには、コンソールでは常に 'アップデート・パッケージjquery'ファイル) – MilkyWayJoe

+1

また、[$ .ajax](http://api.jquery.com/jQuery.ajax/)の正しいコールバックは 'error'であり、' failure'ではありません。それを交換してください。 – MilkyWayJoe

+0

1.4.1は安定していませんか?私はMSがそれが安定していなければならないと仮定して自動的にあなたのためにそれを含めるようだと思います。それは私にそれが失敗していることを示すのに役立った、ありがとう。今なぜ私はそれが失敗しているのかを理解する必要があります:) – user441521

答えて

4

私は知りませんASP.NET ajaxの能力を使用するメソッド。

まず、PageMethodsを使用するには、スクリプトマネージャコントロールをページに追加し、EnablePageMethods = "True"を指定する必要があることに気づきたいと思います。

これを行うと、ScriptManagerは、ページ上に定義されたページメソッドのプロキシを表すPageMethodsクライアント側定義をレンダリングし、Ajaxリクエストを使用してこのメ​​ソッドを簡単に呼び出すことができます。あなたは、このコードは、コードの以下の行を持っており、それが動作見ることができるように

<asp:ScriptManager ID="ScriptManager" runat="server" EnablePartialRendering="true" EnablePageMethods="True" /> 
<input id="btnTest" type="button" value="Test" onclick="btnTest_onclick()" /> 
<script type="text/javascript"> 
    function btnTest_onclick() { 

     PageMethods.GetData(5, Success, Failure); 
    } 

    function Success(data) { 
     alert("success"); 
     alert(data); 
    } 

    function Failure(data) { 
     alert("failure"); 
    } 

</script> 

だから、あなたは以下のコードを試すことができます。

+0

これはうまくいきました!それで、私のアヤックスコールが台無しになっていることがわかります。私は本当にそれが間違っていたかを知りたいです。このページで定義されている関数に対してのみこれを使用できますか?たとえば、どこにでも使用できる共通の関数を格納するために基本的に存在するページを作成したい場合は、呼び出すページ以外のページに存在するため、これは機能しますか?私が見る主な利点の1つは、 'Default.aspx/GetData'を介してajax呼び出しで関数が存在するページを指定できることです。 ScriptManageとPageMethodsでこれを行うことはできますか?もしそうなら、私はこの方法を好む。 – user441521

+0

ページ間でコードを共有するには、Ajax対応のWCFまたはWebサービスを使用する方がよいでしょう。 Dino Espositoの次のリンクは、このアプローチについて説明しています:http://dotnetslackers.com/articles/ajax/JSON-EnabledWCFServicesInASPNET35.aspx。この記事を読むと、wcfサービスを使って作業することは、ページメソッドを使って作業することと同じになることがわかります。注:記事に記述されている方法を実装したwcfサービスメソッドのセッションにもアクセスできます。 –

+0

また、次の質問に対する私の答えを確認することもできます:http://stackoverflow.com/questions/12886991/calling-wcf-server-from-asp-net/12992569#12992569 –

1

データ項目名は、ページメソッドの引数と一致する必要があります:jQueryのを使用してAjaxリクエストを作成することはあなたのための要件ですが、あなたは、より簡単にページにAJAX要求を行うことができれば

var strData = JSON.stringify({ 
       id_MATCH: 5 
      }); 

    [WebMethod()] 
    public static string GetData(int id_MATCH) 
    { 
     return "hello, my id is " + id_MATCH; 
    } 
+0

私はそれらをidの両方に指定しても失敗しました。また、IEを止める方法を知っている人もいます。私は変更を行い、reranと警告()はまだユーザーIDを言った。私は一時インターネットファイルとreranを削除し、その後、それはIDを示したが、それは一時的なインターネットファイルをすべて削除することを迷惑にしています。 – user441521

+1

テスト間で開発サーバーを停止してみます。タスクバーの通知アイコンを右クリックし、[停止]を選択します。 –

+0

これは動作しますが、一時的なインターネットファイルを削除するクリック数はほぼ同じですが、/ – user441521

0

以下はAjaxのポストとウェブメソッドは、$アヤックスから送信されたデータ名は、WebMethod属性の場合と同じである上記のコードをチェックしてもらえ

<input id="btnTest" type="button" value="Test" onclick="btnTest_onclick()" /> 
<script type="text/javascript" > 
function btnTest_onclick() { 

var strData = JSON.stringify({ 
    userid: 5 
}); 

alert(strData); 

$.ajax({ 
    url: 'Default.aspx/GetData', 
    type: "POST", 
    data: strData, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: Success, 
    failure: Failure, 
    async: true 
}); 
} 

function Success(data) { 
alert("success"); 
} 

function Failure(data) { 
alert("failure"); 
}</script> 

[System.Web.Services.WebMethod()] 
    public static string GetData(int userid) 
    { 
     return "hello, my id is " + userid; 
    } 

を処理することです。

おかげ

関連する問題