2013-03-29 4 views
1

Я довольно noob для AJAX Requesting и PHP, и у меня вопрос: Я пытаюсь выполнить запрос GET в php-файл на моем сервере wamp, но это ответText остается пустым и когда я проверяю код состояния, когда readyState равен 4, это 0.responseText of AJAX Запрос с использованием php пуст

Когда я выполняю php-файл в браузере, он возвращает мое ожидание: массив с объектами JSON.

Кто-нибудь знает ответ?

код Javascript:

this.getCars = function(id) { 
    var xmlhttp; 
    if (window.XMLHttpRequest) { 
     xmlhttp=new XMLHttpRequest(); 
    } 
    else { 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    var that = this; 
    xmlhttp.onreadystatechange=function() 
    { 

     if (xmlhttp.readyState==4) 
     { 
      alert(xmlhttp.status); 
      //that.lastTableCars = JSON.parse(xmlhttp.responseText); 

     } 
    } 
    xmlhttp.open("GET","http://localhost/getCars.php?q="+id,true); 
    xmlhttp.send(null); 
} 

PHP:

<?php 
$q=$_GET["q"]; 
$con = mysql_connect('127.0.0.1', 'root', 'root'); 
if (!$con) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 

mysql_select_db("autobay", $con); 

$sql= "SELECT * FROM autoos WHERE id = '".$q."'"; 

$result = mysql_query($sql); 
$info = []; 
while($row = mysql_fetch_assoc($result)){ 
    $info[] = $row; 
} 

echo json_encode($info); 

mysql_free_result($result); 
mysql_close(); 
+0

В вашем php-коде отсутствует '?>' ... – thejh

+1

Ваш код является SQL-инъекцией уязвимой и устаревшей (mysql) – Sam

+3

'?>' Не требуется. –

ответ

2

С одной стороны, использовать JQuery для устранения неполадок. Это сделает вашу жизнь намного проще. Даже если вы в конечном итоге хотите использовать raw xmlhttprequest, я бы предложил запустить jQuery для исключения проблем xmlhttprequest в вашем коде и более быстро оттолкнуть реальную проблему.

Перевод: Мне не удобно с необработанным xmlhttprequest, поэтому, чтобы помочь вам перейти на jQuery. Вы можете вернуться, когда проблема будет решена! =)

this.getCars = function(id) { 
    $.get("/getCars.php?q="+id, function(data) { 
     alert("response from server: " + data); 
    }); 
} 

http://api.jquery.com/jQuery.get/

Также убедитесь, что вы используете Chrome Dev Tools или Firebug, чтобы проверить ответ от сервера, вполне возможно, что он там не удается.

Update:

Убедитесь, что страница HTML (что делает вызов AJAX) и PHP скрипты работают на тот же домен (LOCALHOST). Я заметил, что вы указали полный URL-адрес http://localhost в своем вызове ajax. Ajax не работает в кросс-домене (хотя есть обходные пути, посмотрите на JSONP, если вам действительно нужно сделать этот кросс-домен). Лучше всего получить загрузку вашей HTML-страницы из того же домена, что и PHP-скрипт.

Update 2:

Фактический вопрос в том, что ОП был загрузки HTML из папки на своем компьютере (не через http://localhost) и пытается сделать вызов AJAX для http://localhost. Ajax-вызов терпел неудачу, поскольку это технически перекрестный домен.

+0

Используется, тот же результат, пустой ответ (данные), также Firebug указывает на запрос ajax с красным цветом – Serf

+0

Если Firebug показывает красный цвет, это обычно означает, что сервер не смог вернуть действительный ответ. Как ошибка сервера 500. Вы должны уметь проверять вызов ajax в Firebug и точно видеть, что возвращается с сервера. Возможно, вы не передаете действительный идентификатор, и ваш запрос к базе данных не работает? – jszobody

+0

Запрос базы данных не терпит неудачу, потому что когда я запускаю php-файл непосредственно на сервере, он возвращает данные, которые я хочу – Serf