私はこれで新しく、WebメソッドへのAJAX呼び出しを介して返されるはずのものの周りに私の脳をラップするのに苦労しています。私は単純なログイン画面を作成しようとしています。WebメソッドによるAJAXログイン画面?
は、ここで私が持っているものです。
HTML:
<asp:ScriptManager ID="ScriptManager2" runat="server" EnablePageMethods="true"></asp:ScriptManager>
<input type="text" placeholder="username" id="username" />
<input type="password" placeholder="password" id="password" />
<button id="loginbutton" onclick="UserLogin()" type="submit">login</button>
ではJavaScript:
function UserLogin() {
var postData = JSON.stringify({
"username": $("#username").val(),
"password": $("#password").val()
});
alert(postData);
$.ajax({
type: "POST",
url: "login.aspx/AuthenticateUser",
data: postData,
contentType: "application/json; charset=utf-8",
success: callbackfunction,
error: function (msg) { alert(msg); }
});
}
function callbackfunction(result) {
alert('callback');
if (result.d) {
alert('success');
}
}
Webメソッド:
<WebMethod()>
Public Shared Function AuthenticateUser(sID As String, sPassword As String) As Boolean
Dim db As New ProjectDatabase
Dim ed As New EncryptDecrypt
Dim sSQL As String = "SELECT [USER_ID] FROM [USERS] WHERE [USER_ID] = '" & sID & "' AND [PASSWORD] = '" & ed.Encrypt(sPassword) & "'"
'will return the result of the query, either a user id or nothing
Dim sRtn As String = db.GetSQLData(sSQL, db._cnnSQL)
If sRtn = "" Then
Return False
Else
Return True
End If
End Function
だから私は右のそれを理解していれば、 Webメソッドから真または偽のいずれかを返すことができるはずですが、何らかの理由でそこに着くことができません(ブレークポイントに当たっていない)、AJAXの両端がメッセージボックスをスローする必要があります。しかし、それも起こりません。
私はこの質問が尋ねられていることを知っています。私は複数の記事を読んだことがありますが、それでも正しいように見えることはできません。
ありがとうございました。
ログインエンドポイントに関しては、応答内容が最大の関心事ではないことをお勧めします。応答コードはです。 200(OK)または401(Unauthorized)を返すだけで、クライアントはユーザーがログインできたかどうかを正確に知ることができます。 – Taplar
falseを返すのではなく、 'Throw New WebFaultException(Of ErrMessage)(str、HttpStatusCode.BadRequest)'エラーが発生した場合には、これをajaxのエラー部分に渡す必要があります。 – MB34
'AJAX'と' WebMethod'に同じ変数名を使います。これは 'username'か' sID'です。 –