AJAX, заголовки ответа не отправляются скриптом PHP! - PullRequest
1 голос
/ 20 декабря 2010

Я бью себя по голове уже несколько часов.У меня есть опция выбора, которая обновляет базу данных с помощью AJAX (по крайней мере, это пытается!).При выполнении сценария PHP напрямую с параметрами требуется, чтобы база данных обновлялась, но не при косвенном запуске через AJAX, вместо этого я получаю в 3 раза больше alert("There was a problem in the returned data:\n");, а затем обновляется.JavaScript включен <head>, а не во внешнем файле.Вот так:

JavaScript:

function updateHub(){  
    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("hubinfo").innerHTML=xmlhttp.responseText;  
       }else{  
           alert("There was a problem in the returned data:\n");  
       }  
    }  
    var prefHub = document.getElementById("prefHub");  
    var hubID = prefHub.options[prefHub.selectedIndex].value;  
    xmlhttp.open("GET","updateHub.php?hubID="+hubID,true);  
    xmlhttp.send();  
}

updateHub.php:

session_start();
include '../../../common/config.php';
$hubID = '';
if(isset($_POST['hubID'])){
    $hubID = strip_tags(mysql_real_escape_string(trim($_POST['hubID'])));
}elseif(isset($_GET['hubID'])){
    $hubID = strip_tags(mysql_real_escape_string(trim($_GET['hubID'])));
}
mysql_query("UPDATE prefs set hubID='$hubID' where userID = '".$_SESSION['userID']."'") or die(mysql_error());
if(mysql_affected_rows()){
    echo "Updated";
}else{
    echo 'Error';
}
return $hubID;

и HTML:

<form action="" method="post" onsubmit="updateHub();">
    <select name="prefHub" id="prefHub">
        <option value="43">opt1</option>
        <option value="64">opt2</option>
        <option value="30">opt2</option>
     </select>
     <input type="submit" name="update" value="Update Hub"/>
</form>
<div id="hubinfo"></div>

Ответы [ 2 ]

2 голосов
/ 21 декабря 2010

Вместо этого я получаю 3 раза предупреждение («Возникла проблема в возвращаемых данных: \ n»);

if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("hubinfo").innerHTML=xmlhttp.responseText;
}
else{
alert("There was a problem in the returned data:\n");
}

Это означает, что вы всегда будете видеть предупреждение,Поскольку для любых других значений xmlhttp.readyState будет выполнен блок else {}.


Объект XMLHttpRequest может находиться в нескольких состояниях.Атрибут readyState должен возвращать текущее состояние, которое должно принимать одно из следующих значений:

UNSENT (числовое значение 0)

The object has been constructed. 

OPENED (числовое значение 1)

The open() method has been successfully invoked. During this state request headers can be set using setRequestHeader() and the request can be made using the send() method. 

HEADERS_RECEIVED (числовое значение 2)

All redirects (if any) have been followed and all HTTP headers of the final response have been received. Several response members of the object are now available. 

ЗАГРУЗКА (числовое значение 3)

The response entity body is being received. 

DONE (числовое значение 4)

0 голосов
/ 21 декабря 2010

Я перешел

var prefHub = document.getElementById("prefHub");
var hubID = prefHub.options[prefHub.selectedIndex].value;

сразу после

function updateHub()
{

и удалил

else{
         alert("There was a problem in the returned data:\n");
    }

, и теперь он работает нормально, но я не понимаю почему.Кто-нибудь может объяснить это?

Андреас объяснил почему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...