• 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
1,000 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 375 wizyt
pytanie zadane 18 października 2016 w JavaScript przez rafal1997 Gaduła (3,180 p.)
0 głosów
0 odpowiedzi 164 wizyt
pytanie zadane 17 stycznia 2023 w JavaScript przez Antoni2422 Użytkownik (570 p.)
+1 głos
1 odpowiedź 184 wizyt
pytanie zadane 24 marca 2016 w JavaScript przez CzlowiekSkrypt Nałogowiec (26,340 p.)

93,440 zapytań

142,431 odpowiedzi

322,678 komentarzy

62,802 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

...