Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: AJAX i 400 Bad Request
Forum PHP.pl > Forum > XML, AJAX > AJAX
bor1904
Witam,
Chciałem wykorzystać odrobine AJAXA i już straciłem kilka godzin.

Jest formularz:
  1. <form onsubmit="return send()" name="contact_form" method="post" action="">
  2.  
  3. <label for="author">Imie i nazwisko:</label> <input type="text" id="name" name="name" />
  4. <div class="cleaner_h10"></div>
  5. <label for="email">Email:</label> <input type="text" id="email" name="email" />
  6. <div class="cleaner_h10"></div>
  7.  
  8. <label for="url">Telefon:</label> <input type="text" name="phone" id="url" />
  9. <div class="cleaner_h10"></div>
  10.  
  11. <label for="text">Wiadomość:</label> <textarea id="text" name="enquiry" rows="0" cols="0"></textarea>
  12. <div class="cleaner_h10"></div>
  13.  
  14. <input type="submit" value=" Wyślij"/>
  15.  
  16. </form>



Kod JS w head:

  1.  
  2. <script type="text/javascript">
  3. function send()
  4. {
  5.  
  6. var xmlhttp;
  7. if (window.XMLHttpRequest)
  8. {// code for IE7+, Firefox, Chrome, Opera, Safari
  9. xmlhttp=new XMLHttpRequest();
  10. }
  11. else
  12. {// code for IE6, IE5
  13. xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  14. }
  15.  
  16. xmlhttp.onreadystatechange=function()
  17. {
  18. if (xmlhttp.readyState==4 )
  19. {
  20. alert(xmlhttp.responseText);
  21.  
  22. }
  23. }
  24. xmlhttp.open("POST","test.php",false);
  25. xmlhttp.send();
  26. }
  27.  
  28.  


Skrypt test.php:
  1. <?php echo "fsdfs"; ?>





Po kliknięciu wyślij pojawia sie message boź z treścią pochodzącą z php, a po kliknięciu OK wyskakuje
"400 Bad Request
Your browser sent a request that this server could not understand. "



Co robie nie tak?

PS: z wielu tutków przeklejałem (w tym z W3Schools) i nic ....

mambus
Chyba nie możesz printować jeśli chcesz by ajax to złapał.


Swoją drogą - ja również mam problem. Mam kod w js/ajax:

  1. var http_request = false;
  2.  
  3. function makeRequest(id)
  4. {
  5. http_request = false;
  6.  
  7. if (window.XMLHttpRequest)
  8. {
  9. http_request = new XMLHttpRequest();
  10. if (http_request.overrideMimeType) {
  11. http_request.overrideMimeType('text/xml');
  12. }
  13. }
  14. else if (window.ActiveXObject)
  15. {
  16. try {
  17. http_request = new ActiveXObject("Msxml2.XMLHTTP");
  18. } catch (e) {
  19. try {
  20. http_request = new ActiveXObject("Microsoft.XMLHTTP");
  21. } catch (e) {}
  22. }
  23. }
  24.  
  25. if (!http_request)
  26. {
  27. alert('Poddaję się :( Nie mogę stworzyć instancji obiektu XMLHTTP');
  28. return false;
  29. }
  30. http_request.onreadystatechange = function() { alertContents(http_request); };
  31. http_request.open('GET', '/includes/ajax_api.php?id='+id, false);
  32. http_request.send(null);
  33.  
  34. }
  35.  
  36. function alertContents(http_request) {
  37. if (http_request.readyState == 0) { alert('NIEZAINICJOWANY'); }
  38. if (http_request.readyState == 1) { alert('ładuje'); }
  39. if (http_request.readyState == 2) { alert('załadował'); }
  40. if (http_request.readyState == 3) { alert('walczy z dokumentem'); }
  41. if (http_request.readyState == 4) {
  42. alert('cos pobralo');
  43. if (http_request.status == 200) {
  44. alert("RESPONSE: "+http_request.responseText);
  45. } else {
  46. alert('Wystąpił problem z zapytaniem.');
  47. }
  48. }
  49. }


oraz kod w php:

  1. include_once("config/vars.php");
  2. include_once("class/database.php");
  3.  
  4. database::db_connection(__DB_DB__,__DB_HOST__,__DB_USER__,__DB_PASS__);
  5. header("Content-type: text/xml; charset=UTF-8");
  6.  
  7.  
  8. $id=$_GET['id'];
  9. if(!is_numeric($id)) $id='1';
  10.  
  11. $sql="SELECT `product_name` FROM `sport_produkty` WHERE `product_id`='$id'";
  12. return $row['product_name'];


Problem polega na tym że nie wyświetla mi nic w alercie, po napisie "RESPONSE:", tak jakby responseText był pusty. A reszta komunikatów wskazuje na to że zapytanie się wykonało, np (ładuje - załadował - coś pobrało).

W czym tkwi problem ?Czytałem sporo manuali i jestem początkujący w ajaxie.
rocktech.pl
Witam.

@bor1944

Tu jest twój przykład w akcji. Zobacz, ze działa u ciebie jest problem z URL.

@mambus

Manual instrukcji return.

Jeżeli wywołasz return w w globalnym kontekście zakończy wykonywanie skryptu nie zwracając nic na standardowe wyjście.

W skrócie musisz użyć instrukcji echo.

  1. //return $row['product_name'];
  2. echo $row['product_name'];
mambus
RACJA! Widziałem że jestem blisko.
A jak ma się to do tablicy ?
Chciałbym aby przekazała sie tablica nie tylko z product_name do ajaxa... samo print zwróci tylko array ... ? czy w ajaxie już odnosić się do tych elementów przez responseText.cospotrzebnego ?
vermis
Do przekazania tablicy przez AJAX możesz użyć JSON'a
Tu masz przykład:
http://www.lonet.eu/php/json-czyli-efektywna-komunikacja/
mambus
Ah, no coż. Próbowałem uniknąć JSONa, ale okej, wydłubałem coś takiego:

  1. http_request.onreadystatechange = function() {
  2. $('#info_text_title').html(http_request.responseText);
  3.  
  4. $.getJSON("/includes/ajax_api.php?id="+id,{id:id},function(data) {
  5.  
  6.  
  7. for(var i in data) {
  8. alert(data[i].product_link + '<br/>');
  9. }
  10. });
  11.  
  12. //var infoArray = eval(http_request.responseText);
  13. //alert(infoArray[product_name]);
  14. };


po stronie PHP JSON encoduje się okej bo wyprintowałem i jest właściwy format.

  1. (...)
  2.  
  3. $array=json_encode($row);


Problem jednak pojawia się taki, że kiedy alertuje pętle w jquery to ciągle jest undefined. Czy problem jest z przekazywaniem zmiennej id ? Eh.

EDIT:

Po wyrzuceniu .product_link jest okej - alertuje każdy element. Nie wiem natomiast jak się odnieść np do jednego z nich... np product_link
vermis
Z tego co widzę to do JSONa przekazujesz pojedynczy wiersz z tabeli, wiec w alercie powinieneś odwoałać się przez data['product_link'], bo dostajesz obiekt, a nie tablicę.
mambus
Tak dokładnie - zapomniałem odpisać że udało się.

data.nazwakolumnyztabelki - wystarczy wywołać,


dzięki śliczne za pomoc!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.