2009-09-24 2 views
0

Ajax отвечает пустой строкой при запуске через форму onsubmit в Firefox, но отлично работает в Internet Explorer и Opera (работает в Firefox если отправлено кнопкой отправки вместо формы onsubmit).Ajax отвечает пустой строкой при запуске через форму onsubmit в Firefox, но отлично работает в Internet Explorer

Я просто вызываю php-файл с помощью ajax GET и ответ 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; ?> 

Если я вызвать Аякса на кнопку отправки вместо отправки формы, то она отлично работает в Firefox, как:

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

Любая идея, почему это делая это?

Спасибо.

ответ

1

Я думаю, что часть проблемы в том, что вы не прекращаете нормальное действие submit. То, что он работает вообще, вероятно, основывается на том, как обрабатываются возвращаемые значения последней функции, хотя ее трудно сказать. Попробуйте добавить «return false» к вашему contactFunction();

Если это не сработает, я бы потратил некоторое время на его модернизацию, чтобы использовать фреймворк javascript для AJAX (jQuery, MooTools, Prototype и т. Д.), А не идти по пути отладки различий между браузерами , Решение 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> 

Обратите внимание, что форма должна отправлять на URL, который будет генерировать полный ответ, если Javascript не включен.