Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> AJAX i 400 Bad Request, Your browser sent a request that this server could not understand.
bor1904
post 8.07.2012, 11:57:36
Post #1





Grupa: Zarejestrowani
Postów: 131
Pomógł: 1
Dołączył: 15.10.2009
Skąd: gdańsk

Ostrzeżenie: (0%)
-----


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 ....

Go to the top of the page
+Quote Post
mambus
post 5.09.2012, 09:21:59
Post #2





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 30.11.2010

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
rocktech.pl
post 5.09.2012, 09:46:16
Post #3





Grupa: Zarejestrowani
Postów: 587
Pomógł: 131
Dołączył: 8.02.2010

Ostrzeżenie: (0%)
-----


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'];


Ten post edytował rocktech.pl 5.09.2012, 09:47:13


--------------------
Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. --Brian Moore

I never go looking for a sucker. I look for a Champion and make a sucker of of him. --Amarillo Slim


Home-made : js-gui-classes | Accordion | Tabs | Carousel / php-sms-classes | Obsługa bramki SMS MultiInfo | Obsługa bramki SMS Mobiltek
Go to the top of the page
+Quote Post
mambus
post 5.09.2012, 09:57:27
Post #4





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 30.11.2010

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
vermis
post 5.09.2012, 10:02:18
Post #5





Grupa: Zarejestrowani
Postów: 279
Pomógł: 56
Dołączył: 3.06.2010
Skąd: Tarnowskie Góry

Ostrzeżenie: (0%)
-----


Do przekazania tablicy przez AJAX możesz użyć JSON'a
Tu masz przykład:
http://www.lonet.eu/php/json-czyli-efektywna-komunikacja/


--------------------
Go to the top of the page
+Quote Post
mambus
post 5.09.2012, 11:02:07
Post #6





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 30.11.2010

Ostrzeżenie: (0%)
-----


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


Ten post edytował mambus 5.09.2012, 11:06:04
Go to the top of the page
+Quote Post
vermis
post 5.09.2012, 11:13:50
Post #7





Grupa: Zarejestrowani
Postów: 279
Pomógł: 56
Dołączył: 3.06.2010
Skąd: Tarnowskie Góry

Ostrzeżenie: (0%)
-----


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ę.


--------------------
Go to the top of the page
+Quote Post
mambus
post 5.09.2012, 11:36:23
Post #8





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 30.11.2010

Ostrzeżenie: (0%)
-----


Tak dokładnie - zapomniałem odpisać że udało się.

data.nazwakolumnyztabelki - wystarczy wywołać,


dzięki śliczne za pomoc!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 7.07.2025 - 11:39