17

私はWeb 開発は初めてです、一般的な開発の経験は豊富です。いくつかの入力フィールドと送信ボタンがある ASP ページがあります。この送信ボタンは、コード ビハインド ファイル内のメソッドを呼び出すつもりだった $.ajax を純粋に呼び出します。ただし、2 つの興味深い点に気付きました。まず、提供されるデータに関係なく、ajax 呼び出しは成功します。次に、responseText フィールドはページ全体の html ソースです。

この記事や webconfig を参照する他の記事を読みましが、これらの解決策では問題が解決しないようです。

ここにaspページがあります:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
    <script src="TesScript.js"></script>
    <link rel="Stylesheet" type="text/css" href="TestStyle.css" />
</head>
<body>
    <div>
        <ul class="tempList">
            <li>Name:
                <input id="nameText" type="text" />
            </li>
            <li>Attending:
                <input id="yesButton" type="radio" name="attending" />
                Yes
                <input id="noButton" type="radio" name="attending" />
                No </li>
            <li>Return Address:
                <input id="returnAddressText" type="text" />
            </li>
            <li>
                <input id="submitButton" type="button" onclick="submit()" value="Submit" />
            </li>
        </ul>
    </div>
    <ul id="errorContainer" class="errorSection" runat="server" />
    <ul id="messageContainer" class="messageSection" runat="server" />
</body>
</html>

背後にあるコード:

using System;
using System.Web.Services;
using System.Web.UI;

namespace TestAspStuff
{
    public partial class _Default : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }


        [WebMethod]
        public static string OnSubmit(string name, bool isGoing, string returnAddress)
        {
            return "it worked";
        }
    }
}

そして JavaScript:

function submit() {

    var name = "my name";
    var isAttending = true;
    var returnAddress = "myEmail@gmail.com";

    SendMail(name, isAttending, returnAddress);
}

function SendMail(person, isAttending, returnEmail) {

    var dataValue = { "name": person, "isGoing": isAttending, "returnAddress": returnEmail };

    $.ajax({
        type: "POST",
        url: "Default.aspx/OnSubmit",
        data: dataValue,
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert("Request: " + XMLHttpRequest.toString() + "\n\nStatus: " + textStatus + "\n\nError: " + errorThrown);
        },
        complete: function (jqXHR, status) {
            alert("complete: " + status + "\n\nResponse: " + jqXHR.responseText);
        }
    });

}

ここで、url プロパティを任意のものに変更でき、エラー メソッドが呼び出されず、ステータスが成功で、responseText が HTML ページ全体であることに気付きました。私の webconfig には、適切なセクション (htmlModule セクションを含む) がすべて含まれています。私は.Net 3.5で作業しています。私は助けに感謝します。繰り返しますが、私はこれに本当に慣れていないので、他の人にとって明らかなことは、おそらく私には明らかではありません. これを行うためのより良い方法 (JavaScript から asp.net コード ビハインド メソッドを呼び出す方法) があれば、遠慮なく投稿してください。ありがとう!!!

4

3 に答える 3

20

まず、おそらく return false を追加したいと思うでしょう。JavaScript の Submit() メソッドの一番下に追加します (AJAX で処理しているため、送信が停止します)。

成功イベントではなく、完了イベントに接続しています。大きな違いがあるため、デバッグ結果が期待どおりにならないのです。また、署名方法をあなたのものと一致させたことは一度もありません。また、常に contentType と dataType を提供してきました。例えば:

$.ajax({
        type: "POST",
        url: "Default.aspx/OnSubmit",
        data: dataValue,                
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert("Request: " + XMLHttpRequest.toString() + "\n\nStatus: " + textStatus + "\n\nError: " + errorThrown);
        },
        success: function (result) {
            alert("We returned: " + result);
        }
    });
于 2013-08-14T16:17:27.493 に答える