0

Ajax はonsubmit、Firefox のフォームからトリガーされると空の文字列で応答しますが、Internet Explorer と Opera では正常に動作します (フォームではなく送信ボタンで送信された場合、Firefox で動作しますonsubmit)。

ajax GET を使用して php ファイルを呼び出し、 - を使用して php ファイルの応答を呼び出すだけですecho $response = "something";。次に、応答値がアラートされます。私はIEで動作させていますが、Firefoxでは応答は空の文字列です(によってチェックされますtypeof())。

コードは 4 つのファイル: index.php、ajax-connect.js、cbb.js、cbb.php

index.php

<html> <head>  <script src="ajax-connect.js"></script> <script src="cbb.js"></script>

</head> <body>

<form name="condtactform1" method="get" action="" onSubmit="contactfunction()">
    <input type="submit" name="hissubmit" id="hissubmit" value="submit"> </form>

</body> </html>

ajax-connect.php

/* Create a new XMLHttpRequest object to talk to the Web server */

var xmlHttp = false;
/*@cc_on @*/
/*@
if (@_jscript_version >= 5)
    try {
       xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e2) {
            xmlHttp = false;
        }
    }
@end
@*/


if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
   xmlHttp = new XMLHttpRequest();
}

cbb.js

function contactfunction() {
   var url = "cbb.php";
   xmlHttp.open("GET", url, true);
   xmlHttp.onreadystatechange = updatecontact1;
   xmlHttp.send(null);
}

function updatecontact1() {
   if (xmlHttp.readyState == 4) {
       var responsae = xmlHttp.responseText;
       alert(responsae);
   }
}

cbb.php

<?php $response = "something"; echo $response; ?>

フォーム送信の代わりに送信ボタンで ajax をトリガーすると、次のように firefox で正常に動作します。

<form name="condtactform1" method="get" action="">
    <input type="submit" name="hissubmit" id="hissubmit" value="submit" onFocus="contactfunction()"> </form>

なぜこれをやっているのですか?

ありがとう。

4

1 に答える 1

1

問題の一部は、送信の通常のアクションを停止していないことだと思います。それがまったく機能していることは、おそらく最後に実行された関数の戻り値がどのように処理されるかに基づいていますが、わかりにくいです。contactFunction(); に「return false」を追加してみてください。

それがうまくいかない場合は、クロスブラウザーの違いをデバッグするルートをたどるのではなく、AJAX (jQuery、MooTools、Prototype など) 用の JavaScript フレームワークを使用するように改良することに時間を費やします。jQuery ソリューションは次のようになります。

<form name="condtactform1" method="get" action="cbb-full.php">
    <input type="submit" name="hissubmit" id="hissubmit" value="submit">
</form>

<script type="text/javascript"
        src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js">
<script>

<script type="text/javascript">
    $(function() {
         $('#hissubmit').click( function() {
             $.get( 'cbb.php', function(response) {
                 alert(response);
             });
             return false;
         });
    });
</script>

JavaScript が有効になっていない場合、フォームは完全な応答を生成する URL に投稿する必要があることに注意してください。

于 2009-09-24T00:57:49.260 に答える