電子書籍の厳選無料作品が豊富!

以下のようなコードでフォームを制御したいのですが、戻り値にfalseを返しているのにフォーム送信されてしまいます。
chekData はDB(mysql)にアクセスして重複チェックするだけのものです。

firefoxのエラーコンソールでは以下のようなエラーを出しますが意味がよくわかりません。
エラー: [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: http://192.168.49.128/js/scripts.js :: anonymous :: line 52" data: no]
ソースファイル: http://192.168.49.128/js/scripts.js
行: 52
---------------------- Javascript -----------------------------
function checkData(vender) {
ajax.open("GET", "chkDvl.php?dvl=" + encodeURI(vender),true);
ajax.onreadystatechange = function() { <<<< 問題の52行目
if (ajax.readyState == 4 && ajax.status == 200) {
var res = decodeURI(ajax.responseText);
if (res != 0) {
window.alert(vender + " " + res + "は既に登録済です");
return false;
}else{
return true;
}
}
}
ajax.send(null);
}

----------------------------- HTML ---------------------------
<form action="test.php" method="post"
onsubmit="return checkData(this.dvl.value)">
<input name="dvl" type="text" />
<input name="button" type="submit" value="送信" />
</form>

ちなみに別のソースの非同期通信を使用しないものはsubmitの制御はできています。
よろしくお願いいたします。

A 回答 (1件)

checkData関数はfalseを返していませんね。



エラーチェックの判定結果でtrue/falseを返している部分は、
あくまで onreadystatechange に対してですので。

checkData関数の最後、ajax.send(null);の後に無条件でreturn falseし、
エラーチェックの判定結果でtrue/falseを返している部分で、
エラーでなければフォームをsubmitするような造りにするといいかと思います。
    • good
    • 0
この回答へのお礼

teel_gray さん、回答ありがとうございます。

確かに言われてみれば、returnの値は外に返していないですね。言われたとおりにしたら解決しました。

ajaxに関しては、よく分からずサンプルを利用しているのでトラブルと自己解決が中々出来ません。
大変助かりました。ありがとうございました。

お礼日時:2007/10/31 20:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!