2013-11-21 6 views
0

Это моя первая встреча с Ajax, и я тоже новичок. , , все!My Ajax GET не работает.

В конце концов я хочу получить значения из базы данных, но просто чтобы проверить, что у меня работает Ajax, все, что я пытаюсь сделать, - это отобразить строку текста.

Вот мой код:

function loadSection(section) 
{ 
if (section=="") 
    { 
    document.getElementById("entry").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("entry").innerHTML=xmlhttp.responseText; 
    } 
    } 
xmlhttp.open("GET","getentry.php&q="+section,true); 
xmlhttp.send(); 
} 

А вот PHP:

<?php 

$section = $GET[$section]; //not currently doing anything, will be needed when  
actually searching database 

echo "fingers crossed"; 


?> 

Насколько я могу сказать единственное, что я делаю разные к примеру на сайте W3Schools так ли помещая Ajax в отдельный .js-файл, но он также не работает, когда я включаю его на главную страницу.

Любая помощь очень ценится!

Редактировать добавить: спасибо, ребята! jraede правильно понял, функция никогда не вызывался, и JQuery наводке также оценили :-)

+0

Поддерживаете ли вы IE6, IE5 по какой-либо конкретной причине? У вас есть сервер? Любые ошибки в консоли? – Ryan

+3

is not getentry.php & q =, попробуйте с getentry.php? Q = – Misters

+4

jquery облегчит вам изучение –

ответ

0

вы должны предписанием как this-

$section = $GET['q']; 
0

не getentry.php&q=,

попробовать с

getentry.php?q=

И в $ _GET должны быть $_GET['q']

Если вы используете хром, откройте консоль и посмотрите, есть ли какие-либо ошибки.

+0

Сделал эти изменения и до сих пор не повезло. Я использую хром, а в консоли, когда я нажимаю кнопку, ничего не происходит! –

+1

Откройте вкладку «Сеть», чтобы просмотреть запрос, и вы увидите, что такое ответ. – jraede

+0

ОК странно. , , ничего не происходит, когда я нажимаю эту кнопку –

0

Вы должны смотреть на jQuery

Вы могли бы просто использовать .get() для извлечения необходимой информации.

Пример $.get()

$.get("getentry.php?q=" + section, function(data) { 
     // log response in console. 
     console.log(data); 
    }); 
+0

Это не отвечает на вопрос, почему он не работает. – Ryan

+0

он не отвечает на ваш вопрос. но это более простой способ выполнить то, что вы собираетесь делать – hamobi

+0

@minitech Да, я просто предлагаю другой подход. – Darren

0

Есть несколько вещей, которые можно было бы идя неправильно здесь, так что это помогло бы иметь больше информации. Однако, исходя из того, что вы предоставили, я могу определить следующие области, которые вы должны проверить:

1) Убедитесь, что ваш синтаксис верен как в javascript, так и в PHP.

В вашем javascript есть несколько ошибок, о которых уже указывали люди, а именно, что "getentry.php&q=" должно быть "getentry.php?q=".

На вашем PHP вы пытаетесь получить $GET[$section], который имеет две ошибки. Во-первых, для извлечения переменных из строки запроса вам необходимо использовать $_GET, а не $GET. Во-вторых, если $section еще не определен или, по крайней мере, что в строке запроса нет соответствующей переменной, этот код вернет пустое значение. Как уже отмечалось, это должно быть $_GET['q'].

2) Убедитесь, что ваш скрипт делает то, что, по вашему мнению, делает.

Где вы звоните в свою loadSection()? Вы вообще это называете? Попробуйте использовать alert или console.log, чтобы высветить значение section внутри этой функции - может быть, оно не установлено?

3) Убедитесь, что запрос выходит, и проверить, если вы получаете ответ

С Chrome вы можете открыть инструменты разработчика, нажмите на вкладку сети, а также смотреть AJAX запросы выйти и просмотреть их ответ. Откройте вкладку «Сеть», обновите страницу, сделайте все, что вам нужно, чтобы вызвать функцию loadSection(), а затем нажмите вкладку «Предварительный просмотр» или «Ответ», чтобы узнать, что ответил ваш сервер. Возможно, фактический запрос AJAX работает нормально, и он просто ничего не делает с ответом.

4) Убедитесь, что ваш ответ действует

Я вижу, что у вас есть код, чтобы установить innerHTML из #entry с тем, что текст ответа. Убедитесь, что есть элемент с id="entry" где-то на странице и что он находится на странице в то время, когда этот код запущен. Кроме того, попробуйте использовать console.log на объекте xmlhttp в вашей функции onreadystatechange, чтобы увидеть, что он делает. Может быть, код статуса никогда не установлен в 200 или readyState никогда не установлен в 4.

+0

Благодарим вас за подробный ответ :-) Я думаю, что вы были правы, когда сказали, что это никогда не назовешь - переход на jquery подход, описанный в другом ответе И изменение кнопки на onclick, кажется, решает ее :-) –

+0

Возвращаясь к тому, как вы ее первоначально, вы можете определить все функции, которые вы хотите, но вам нужно * вызвать их как-то по порядку для их исполнения.Помещение функции в событие 'onclick' кнопки будет делать это, или вы можете вызвать его напрямую, просто выполнив' loadSection ('name_of_section'); 'после определения функции. – jraede

Смежные вопросы