Witam. Przerabiam pewną książkę by nauczyć się AJAX'a. Jeden przykład z tej książki nie chce mi działać. Gdy dane były wysyłane do skryptu PHP metodą GET wszystko działało, lecz kiedy przerobiłem skrypt by wysyłać dane metodą POST zapytanie zaczęło zwracać null. Tak wygląda cały kod:

  1. <script type="text/javascript">
  2. var zapytanie = false;
  3. var opcje;
  4. if(window.XMLHttpRequest){
  5. zapytanie = new XMLHttpRequest();
  6. } else if(window.ActiveXObject) {
  7. zapytanie = new ActiveXObject("Microsoft.XMLHTTP");
  8. }
  9.  
  10.  
  11. function opcjee(schemat){
  12. var url = "opcje.php";
  13.  
  14. if(zapytanie){
  15. zapytanie.open("POST", url);
  16. zapytanie.setRequestHeader('Content-Type', 'application/x-www-form-urlencode');
  17. zapytanie.onreadystatechange = function(){
  18. if(zapytanie.readyState == 4 && zapytanie.status == 200){
  19. var danexml = zapytanie.responseXML;
  20. opcje = danexml.getElementsByTagName("option");
  21. listaOpcji();
  22. }
  23. }
  24. zapytanie.send("schemat="+schemat);
  25. }
  26. }
  27.  
  28.  
  29. function listaOpcji(){
  30. var selectControl = document.getElementById("optionList");
  31. for (var i = 0; i < opcje.length; i++ ){
  32. selectControl.options[i] = new Option(opcje[i].firstChild.data);
  33. }
  34. }
  35.  
  36. function setOption (){
  37. document.body.style.backgroundColor =
  38. opcje[document.getElementById
  39. ('optionList').selectedIndex].firstChild.data;
  40. }
  41. </head>
  42.  
  43. <select size="1" id="optionList"
  44. onchange="setOption()">
  45. <option>Wybierz schemat</option>
  46. <input type = "button" value= "Użyj schematu kolorów 1"
  47. onclick = "opcjee(1)">
  48. <input type = "button" value= "Użyj schematu kolorów 2"
  49. onclick = "opcjee(2)">
  50. </form>
  51. </body>
  52. </html>


Na stronie znajdują się dwa przyciski i rozwijana lista. Wciśnięcie jednego przycisku powoduje wysłanie wartości '1' lub '2' do skryptu opcje.php który generuje kod xml. Następnie ajax łączy się ze skryptem i powinien pobrać dane po tagach <option>. Tak wygład skrypt opcje.php:

  1. <?php
  2. header("Content-type: text/xml");
  3.  
  4. if ($_POST["schemat"] == "1")
  5. $options = array('red', 'green', 'blue');
  6. if ($_POST["schemat"] == "2")
  7. $options = array('black', 'white', 'orange');
  8.  
  9. echo '<?xml version="1.0"?>';
  10. echo '<options>';
  11. foreach ($options as $value)
  12. {
  13. echo '<option>';
  14. echo $value;
  15. echo '</option>';
  16. }
  17. echo '</options>';
  18. ?>


Zmienna danexml zwraca null. Konsola wyrzuca taki błąd: Uncaught TypeError: Cannot call method 'getElementsByTagName' of null. Siedzę nad tym drugi dzień i nie potrafię tego rozgryźć. Ma ktoś pomysł co jest źle?

Problem rozwiązany. Zjadłem literkę na końcu
Kod
zapytanie.setRequestHeader('Content-Type', 'application/x-www-form-urlencode');