• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

JQuery $.post() i $.ajax() zwracają kod OBECNEJ STRONY zamiast wiadomości z PHP

Object Storage Arubacloud
0 głosów
810 wizyt
pytanie zadane 2 sierpnia 2016 w JavaScript przez DarkEliat Bywalec (2,810 p.)

Witam.

Trochę szukałem i zdaje mi się, że nie znalazłem rozwiązania mojego problemu na tym forum, więc sam piszę post. Piszę formularz, który wysyła dane przez $.post() albo $.ajax() metodą POST.

Samo wysyłanie przebiega pomyślnie i kod PHP jest realizowany poprawnie, lecz wiadomość zwrotna z serwera np. echo "Działa, wysłane dane to ".$_POST['dane']; jest błędna. Funkcja, która jest odpowiedzialna za obsłużenie wiadomości z PHP wyświetla źródło obecnej strony, a wiadomość tak jakby przepadała.

Wydaje mi się, że doszedłem do tego, ponieważ na mojej stronie część elementów jest przetrzymywana w zmiennych w PHP, a przy załadowaniu strony są one po prostu wyświetlane (To pomaga utrzymać mi ład w kodzie i ułatwia edycję tych elementów), zakomentowanie tych części kodu, powoduje, że kod części z tych elementów nie pojawia się w wiadomości zwrotnej. Dodatkowo są także ładowane dane z bazy danych np. pliki, bądź jakieś linki, one nie są wyświetlane przez funkcję zwracającą wiadomość (Sam nie wiem dlaczego, ponieważ są ładowane w tym samym czasie). Jeśli coś jest niejasne proszę pisać. Dodaję ScreenShota z wynikiem i kod funkcji. Pozdrawiam.

 

Kod funkcji odpowiedzialnej za obsługę AJAXa przez JQuery:

function postEditFile(IDFile, Title, Path)
{

	Title = $("input[name=name]").val();
	Path = $("input[name=path]").val();
				
	/*$.ajax({           //Tu jest rozwiązanie za pomocą funkcji $.ajax();
                type: "POST",
                url: 'EditFile.php',
                data: 
		{
			id: IDFile,
			name: Title,
			path: Path
		},
                error: function()
                {
                    alert("błąd");
                },
                success: function(data){
                    alert(data);
                }
        	});*/
				
		$.post("EditFile.php",
		{
			id: IDFile,
			name: Title,
			path: Path
		},
		function(data)
		{
			alert("Data: " + data ); 
		});
}

Kod PHP z elementami strony (przykładowy):

Zmienne.php:

<?php
$head = "<script src="script.js"></script>
                 <script scr="menu.js"></script>";
?>

download.php:

<?php
require_once "Zmienne.php";
?>

<html>
<head>
     <?php
     echo $head;
     ?>
</head>

<body>
</body>
</html>

A tu jest SS:

Błąd AJAX JQuery.png

2 odpowiedzi

+1 głos
odpowiedź 2 sierpnia 2016 przez writen Nałogowiec (29,060 p.)
wybrane 2 sierpnia 2016 przez DarkEliat
 
Najlepsza
require_once "kod_zrodlowy.php"; //To jest ten plik, który opisałem jako zmienne.php

Po co to dołączasz i co się tam konkretnie znajduje?

 

echo $id.'   '.$name.'   '.$path; //To jest wiadomość zwrotna
 
    if($stmt = $mysqli->query("UPDATE pliki SET name = '$name', path = '$path' WHERE id = $id LIMIT 1"))
    {       
        header("Location: pobieranie");
    }   

Coś takiego, w przypadku spełnienia się warunku, spowoduje błąd. Nie możesz wysłać żadnej treści przed wysłaniem nagłówka. W przypadku spełnienia warunku twój skrypt zostanie przekierowany do katalogu pobieranie, czyli De facto do ścieżki pobieranie/index.(php/html). A więc w taki sposób twój skrypt JS otrzyma zawartość tego pliku (pobieranie/index.(php/html)).

Zamiast funkcji header() powinieneś użyć echo z informacją, że update się powiódł. Bez sensu też jest wyświetlanie czegokolwiek przed tym warunkiem.

komentarz 2 sierpnia 2016 przez DarkEliat Bywalec (2,810 p.)
Bardzo dziękuję za pomoc w zrozumieniu i rozwiązaniu błędu, to header() jest pozostałością po starym skrypcie zanim zacząłem przygodę z AJAXem, nawet się nie domyślałem, że to może być powodem błędu. Jeszcze raz dziękuję, Twoja odp. została ustawiona jako najlepsza. Pozdrawiam.
0 głosów
odpowiedź 2 sierpnia 2016 przez ormu16 Gaduła (4,980 p.)

Możesz pokazać kod pliku EditFile.php? Polecam dane wyświetlać poprzez console.log a nie alert.

komentarz 2 sierpnia 2016 przez DarkEliat Bywalec (2,810 p.)

Tutaj jest zawartość pliku EditFile.php:

<?php
require_once "mechanika.php"; //Funkcje, z których korzystam np. polacz();
require_once "kod_zrodlowy.php"; //To jest ten plik, który opisałem jako zmienne.php

session_start();

	if(!isset($_SESSION['zalogowany']) || !isset($_SESSION['user']) || $_SESSION['user'] != "admin" ||
	   !isset($_POST['id']) || !is_numeric($_POST['id']) || $_POST['id'] < 1 || !isset($_POST['name']) ||
	   $_POST['name'] == "" || !isset($_POST['path']) || $_POST['path'] == "")
	{
		header("Location: pobieranie");
		exit();
	}
	
	$mysqli = polacz();
	
	$id = $_POST['id'];
	$name = $_POST['name'];
	
	$path = $_POST['path'];
	
	echo $id.'   '.$name.'   '.$path; //To jest wiadomość zwrotna

	if($stmt = $mysqli->query("UPDATE pliki SET name = '$name', path = '$path' WHERE id = $id LIMIT 1"))
	{		
		header("Location: pobieranie");
	}		
	else
	{
			echo "2B"; //Tutaj pracuję nad obsługą błędów, nie działa, ale to inna sprawa
			echo $stmt->connect_errno;
	}

	$mysqli->close();
?>

Jak mówiłem tutaj wszystko jest ok, rekord w bazie poprawnie jest zmieniany.

Podobne pytania

0 głosów
2 odpowiedzi 322 wizyt
pytanie zadane 18 października 2016 w JavaScript przez rafal1997 Gaduła (3,180 p.)
0 głosów
0 odpowiedzi 127 wizyt
pytanie zadane 17 stycznia 2023 w JavaScript przez Antoni2422 Użytkownik (570 p.)
+1 głos
1 odpowiedź 136 wizyt
pytanie zadane 24 marca 2016 w JavaScript przez CzlowiekSkrypt Nałogowiec (26,340 p.)

92,572 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...