2013-07-19 5 views
1

Это мой первый раз на StackOverflow, пожалуйста, простите меня, если я забуду какую-то важную информацию или если мой вопрос звучит глупо!Функция обратного вызова ajax пуста

Я создаю веб-сайт, который генерирует список, как только пользователь записывает слово и нажимает кнопку «Отправить». Php отвечает за извлечение необходимых данных и возврат их на веб-страницу в виде списка.

Моя проблема заключается в том, что я хочу передать эти данные в функцию js. Я прочитал много ответов на StackOverflow об этом, и это звучало как функция обратного вызова - это то, что мне нужно. Однако моя функция js продолжает говорить мне, что мой узел равен нулю; кажется, данные, возвращенные из ajax, не учитываются.

Вот некоторые части моего кода:

<script> 
     var xmlhttp; 
     function loadXMLDoc(cfunc){ 
      if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari 
       xmlhttp=new XMLHttpRequest(); 
      } else {// code for IE6, IE5 
       xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
      var us = document.getElementById("user").value; 
      var ur = document.getElementById("wiki").value; 
      xmlhttp.onreadystatechange = cfunc; 
      xmlhttp.open("GET","contributions_old.php?user="+us+"&wiki="+ur+"",true); 
      xmlhttp.send(); 
     } 
     function myFunction() { 
      loadXMLDoc(function() {      
       if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
        document.getElementById("result").innerHTML=xmlhttp.responseText; 
        var parser = new DOMParser(); 
        var responseDoc = parser.parseFromString (xmlhttp.responseText, "text/html"); 
        var text1 = responseDoc.getElementById('old1').value; 
        var text2 = responseDoc.getElementById('new1').value; 

        var dmp = new diff_match_patch(); 
        dmp.Diff_Timeout = 0; 

        // No warmup loop since it risks triggering an 'unresponsive script' dialog 
        // in client-side JavaScript 
        var ms_start = (new Date()).getTime(); 
        var d = dmp.diff_main(text1, text2, false); 
        var ms_end = (new Date()).getTime(); 

        var ds = dmp.diff_prettyHtml(d); 
        document.getElementById('outputdiv').innerHTML = ds + '<BR>Time: ' + (ms_end - ms_start)/1000 + 's'; 
       }     
      }); 
     } 
    </script> 

Это, конечно, Отправить кнопка, которая вызывает MYFUNCTION() в нижней части моей веб-странице после того, как пользователь ввел слово. Я также подтвердил, что моя веб-страница после создания списка имеет div с «new1» и «old1» как идентификаторы (они генерируются через мой PHP-код).

Любая помощь была бы действительно оценена! Я чувствую, что все пробовал!

Спасибо! :)

+8

Любая причина, по которой вы вручную записываете код AJAX, вместо того, чтобы использовать одну из многих тщательно протестированных, хорошо документированных, поддерживаемых сообществом библиотек, таких как jQuery? – webbiedave

+0

Не вредите этому в vanila JS, особенно если вы не используете jQuery в другом месте. Вы пробовали использовать абсолютный путь к странице 'contrib_old.php'. – jmiraglia

+0

Я получил код ajax из w3School, так как у них есть подробный учебник о том, как он работает, и я чувствовал себя более комфортно, используя его таким образом. Будет ли писать его с помощью jQuery решить мою проблему? Я думаю, что путь к contrib_old работает, так как моя страница обновляется списком, извлеченным из него? – user2600775

ответ

1

Очень рекомендую использовать jQuery или некоторые другие библиотеки для этого.

var url = "contributions_old.php?user=" + $("#user").val() + "&wiki=" + $("#wiki").val(); 
$.get(url); 
+0

umm ... если вы хотите предложить библиотеку, вы должны сделать это правильно и использовать '$ .serialize' или (еще лучше) параметр' data'. –

+0

@JanDvorak OP не упоминает о представлении всей формы, всего 2 параметра. – kcathode

+0

, в этом случае я рекомендую использовать параметр 'data' –