У меня проблема в ajax и она не печатает сообщение, которое я хочу. Давайте объясним. В php-коде у меня есть входной тег:
<input type="submit" id="login_button_add" name="submit" value="Add" onclick="add_building(); showbuildings( );" />
Эти две функции js:
function add_building(){ var str1=document.getElementById("building_name").value; if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("txtHint10").innerHTML=xmlhttp.responseText;} } xmlhttp.open("GET","add_building.php?q="+str1,true); xmlhttp.send(); }
В add_building.php
я добавляю строку в базу данных и печатаю сообщения. Запрос работает нормально, но он не печатает сообщение на моей странице с идентификатором, который у меня есть в моем html-коде. Я думаю, что проблема в том, что я называю вторую функцию js. Потому что, когда я вызываю только add_building()
он отлично работает (печатает сообщения).
PHP-код add_building.php
:
$q=$_GET["q"]; if ($q!==''){ $link= mysqli_connect(...); mysqli_set_charset($link, "utf8"); $sql="SELECT * FROM buildings WHERE name='$q'"; $result = mysqli_query($link,$sql); if (!mysqli_num_rows($result)){ mysqli_set_charset($link, "utf8"); $sql="INSERT INTO buildings VALUES ('','$q','')"; $result =mysqli_query($link,$sql); echo "The building added successfully."; } else {echo 'Building name exists. Try a different.';} @ db_close($link); } else{echo 'Please insert a name.';}
Другая функция js:
function showbuildings(str) { if (str=="") { document.getElementById("show_buildings_js").innerHTML=""; return; } if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("show_buildings_js").innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET","showbds.php?q=",true); xmlhttp.send(); }
В этой функции я печатаю таблицу на своей странице. Это прекрасно работает.
Проблема в том, что сообщения от add_building.php
не печатаются в id='txtHint10'
, несмотря на то, что все остальные в add_building.php
работают. Я думаю, что проблема в том, что я вызываю вторую функцию js, и у меня есть два xmlhttp.responseText. Потому что, когда я вызываю только функцию js add_building()
она отлично работает и печатает сообщения.
Проблема в том, что вы переписываете переменную xmlhttp
со второй функцией javascript. В результате выполняется только обратный вызов от второй функции.
Чтобы обе функции работали независимо друг от друга, вам нужно будет использовать разные имена переменных или объявлять их локально в каждой из ваших функций с помощью var xmlhttp;
(очиститель).
Обратите внимание, что область действия переменной в javascript является глобальной, если вы не объявите ее с помощью var
в вашей функции.