私は自分のコントローラにあるアクションメソッドにajax呼び出しを行っている外部JavascriptファイルにいくつかのjQueryコードを持っています。外部のJavascriptファイルのコードは次のとおりです。アクションメソッドは最終的に呼び出されていますが、時間内に呼び出されていません。アクションメソッドにブレークポイントを設定すると、送信ボタンのクリックがfalseを返すまで呼び出されません。 EmailExist関数が "isvalid"を返すとき、isvalidは未定義です。ASP.NET MVC jQuery AJAX呼び出しアクションメソッドが遅すぎますか?
最終的に呼び出されるアクションメソッドの問題ではなく、何らかの理由でEmailExistが常にundefinedを返し、MVC Actionメソッドがボタンクリックが返されるまで呼び出されません。何かご意見は?
処置方法:
[AcceptVerbs(HttpVerbs.Post)]
public JsonResult EmailExist(string email)
{
Account account = _generalService.GetAccountByEmail(email);
bool exist = false;
if (account != null)
exist = true;
return Json(new { indb = exist });
}
のJavascript:
$(document).ready(function() {
$("input[type=submit]").click(function() {
var valid = true;
// email - check required and valid
var email = $("input[name='email']");
var emailtrim = jQuery.trim(email.val());
// email exists in db ajax request
if (EmailExist(emailtrim)) {
valid = false;
}
return valid;
})
function EmailExist(emailval) {
var isvalid;
// hit db
$.ajax(
{
type: "POST",
url: "/Account/EmailExist",
data: { 'email': emailval },
success: function(result) {
if (result.indb) {
isvalid = true;
}
},
error: function(error) {
alert(error);
}
});
return isvalid;
}
})。
これは私の問題を解決していないようです。とにかくこれは外部のJSファイルにある呼び出しに関連する可能性がありますか? JSとActionMethodの両方にブレークポイントを設定し、残りのJSコードが実行されるまでActionMethdは呼び出されません。それ以上の考え? – aherrick
私は電子メールがまだ存在しない場合、フォームを送信するajaxコールバックを持つ代替を追加しました。 – tvanfosson
素晴らしい!しかし、ここに問題がある、私は電子メールを検証し、スクリプトの後半でさらに検証を続ける必要がある。基本的に電子メールが存在しない場合は、フォームを送信するだけではありません。それはboolを裏返す必要があります。ここでjavascriptの最後に、私はtrueまたはfalseを返して提出します。 – aherrick