jquery problem z przesłaniem zmiennych type: "GET"

0

Witam,

Mam mały problem z przesłaniem danych przez GETa:
Mój kod, skróciłem jak się tylko dało, żeby kod był czytelny:

index.html

 
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<script>

$().ready(function()
{
    $('#dodaj').click(function()
    {
        $.ajax({
            type: "GET",
            url: "czat.php",
            data: "chat=dodaj",
        });
        $('div#czat').load('czat.php');
    });

});
</script>
</head>

<body>



<form>
<div id="czat"></div>
<input type="text" id="wpis"/><input type="button" id="dodaj" value="Dodaj"/>
</form>



</body>
</html>

czat.php

 
<?php

    echo $_GET['chat'];

?>
1

Odpowiedź:
RTFM
http://api.jquery.com/jQuery.ajax/
http://api.jquery.com/load/

Ty wykonujesz w tym przykładzie DWA żądania Ajax:
Jedno wysyła dane GET i z odpowiedzią nie robi NIC.
Drugie jednocześnie się wysyła (bez GET - po prostu czat.php) i odpowiedź (pusta, skoro nie przekazujesz nic) ładujesz do diva.

PS. Zainteresuj się narzędziami deweloperskimi (Firebug i odpowiedniki dla innych przeglądarek) - tam bez problemu widać co robisz, czy nie ma błędów, jeżeli są to jakie i gdzie itd.

0

ok, dzięki już czytam ;)

1

Przykład który ja kiedyś napisałem i działał:

$.ajax({
    type: "GET",
    url: "ViewArticle",

    success: function($data)
    {
	 // tutaj jakaś operacja na zmiennej $data w której są zwrócone przez serwer dane
    }
});

Tak więc zgodnie z dokumentacją, potrzebna jest funkcja która wykona się gdy odwołanie się powiodło i w niej należy umieszczać podmianę zawartości

0

hmm, ok już prawie jest dobrze

teraz w GETcie przekazuję chat=dodaj, a jak zmienić to na zawartość z inputa wpis ??

0

działa:) dzięki :)

0

Przestudiowałem materiały, które mi podaliście i nie załatwiają jednak one całej mojej sprawy.

Dalej nie wiem jak przesłać dane(zmienne) z formularza znajdującego się w jQuery UI Dialog do PHP, metodą POST lub GET ...

W tych materiałach nic nie ma na ten temat :(

dzek69 napisał(a):

Odpowiedź:
http://api.jquery.com/jQuery.ajax/
http://api.jquery.com/load/

Może jakieś inne podpowiedzi ?

0

Witam ponownie ;) Udało mi się zrobić ładne dialogi w jQuery do dodawania pracowników :) jest jeden problem... mam plik index.php, dodaj.php oraz ajax,js. Pracowników dodaje po kolej, jeden po drugim... problem mam z wyświetlaniem, na bieżąco dodanych pracowników :/

Jak wchodzę w index.php, to pobiera mi pracowników, którzy istnieją już w bazie danych oraz mam dialog(), który dodaje pracownika. Sama funkcja dodawania pracownika jest w dodaj.php, ten sam plik ma zwracać wyniki... jak dodam tylko jednego pracownika to spoko, bo pobiore ostatni dodany ID i jednym zapytaniem wszystko ogarnę. ale jak dodam z 2-3 pracowników to już ten myk nie przejdzie :/ co zrobic ?

KOD:
index.php

 
<?php
require('./connect_db.php');

//START:
$pobierz = new Db;
$pobierz->polacza();
$pobierz->select("SELECT * FROM uzytkownicy");

 $tab = array();
 $tab = $pobierz->setTab();
 foreach($tab as $k => $w){
	foreach($w as $k1 => $w1){
		echo $w1."<br />";
		}
 }
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>Ajax fight</title>
<link href="css/smoothness/jquery-ui-1.9.0.custom.css" rel="stylesheet">
	<script src="js/jquery-1.8.2.js"></script>
	<script src="js/jquery-ui-1.9.0.custom.js"></script>
	</head>
<body>


<div id="feedback"></div>


<button id="opener">Dodaj pracownika</button> 

<div id="dialog" title="Dodaj pracownika">
<form>
	<p><input id="name" type="text" /></p>
	<p><textarea id="string" rows="7"></textarea><br /></p>
	<input  type="button" id="button" value="dodaj" />
</form>
</div>


<script type="text/javascript" src="ajax.js"></script>
<script>

	$(function() {
		$( "#dialog" ).dialog({
			autoOpen: false,       
            modal: true,
	
			buttons: {
				"Zapisz": function() {
					$( this ).dialog( "close" );
				},
				
			},
			   close: function() {
                allFields.val( "" ).removeClass( "ui-state-error" );
            }
		});

		$( "#opener" )
		.button()
		.click(function() {
			$( "#dialog" ).dialog( "open" );			
		});
	});
	
	
</script>	
</body>
</html>

dodaj.php

 
<?php
require('./connect_db.php');

//START:
$zapisz = new Db;
$zapisz->polacza();
$zapisz->query("INSERT INTO `uzytkownicy` 
	( `login`, `haslo`, `ranga`, `email`, `u_activation_key`, `u_active`) 
	VALUES ('login', 'haslo', '1', 'email', '0', '0');");
$id = $zapisz->setLastId();


/*
if (isset($_POST['name'], $_POST['string'])){

	$name = $_POST['name'];
	$string = $_POST['string'];
	
	echo '<b>'.$name.'</b><br />'.$string;
}
*/

$pobierz = new Db;
$pobierz->polacza();
$pobierz->select("SELECT * FROM uzytkownicy WHERE ID_uzytkownik = '$id'");

 $tab = array();
 $tab = $pobierz->setTab();
 foreach($tab as $k => $w){
	foreach($w as $k1 => $w1){
		echo $w1."<br />";
		}
 }
 
 $zapisz->closeConnect();
 $pobierz->closeConnect();
 $zapisz = null;
 $pobierz = null;
 ?>
0

nikt, nic , nie pomoże ?

1

Nie wszyscy siedzą w nocy i czekają na nowy temat.
Jeżeli dodajesz wiele rekordów, to po każdym zapytaniu dodaj sobie nowozapisane ID to tablicy, jak już skończysz dodawanie i chcesz zwrócić nowe rekordy, to po prostu imploduj tablicę z przecinkiem jako separator, w SQL napisz WHERE id IN ($implodowana_tablica) i masz gotowe do wyświetlenia.

0

sorry, masz racje :/ nie chciałem nikogo swoim postem wkurzyć. w sumie o takim rozwiązaniu też myślałem, jednakże stawiałem, że to jest trochę nie odpowiednie z połączeniu z jQuery, że tak się nie robi...
myślałem, że jest może jakiś delikatnie lepszy sposób na dialogi()??? ale ok, dzięki serdecznie i za to :)

0

nie działa to :(

 

(...)
$index[]= $id = $zapisz->setLastId();

//print_r($index);

$zap = implode(',', $index);

$pobierz->select("SELECT * FROM uzytkownicy WHERE ID_uzytkownik IN('$zap') ");
(...)
 print_r($index);

wypluwa tylko ostatatnio dodany ID

i tak zwraca tylko ostatni id. zobacz, ze ten skrypt wykonuje się kilka razy, tzn za każdym razem jak wciśniesz dodaj pracownika. A może przez zamknięcie sesji z połączeniem z bazą danych ... ?

0

może lepiej przeładować stronę ? czy coś >>??

 
$("#dialog-modal").load(url, {"requestId": requestId, "userId": userId})

Walcze dalej :)

0

Ja tam w ogóle nie widziałem pętli w Twoim pliku PHP, nie chce mi się analizować całości Twojego kodu (zresztą za dużo go nie podałeś)

Wysyłasz w requeście jednego nowego użytkownika? Bo ostatni post zabrzmiał jakbyś dodawał paru użytkowników na raz, teraz jak się przyjrzałem i przeczytałem odp. to chyba nie bardzo.

Może opisz krok po kroku co ty w ogóle chcesz zrobić (przy okazji może pomożesz sobie samemu).

0

Formularz może dodać tylko i wyłącznie jednego user'a na raz! Ale admin może chcieć dodać kilku user'ów.
A wiec kilka razy bedzie musiał wyświetlać ten sam formularz przez dialog(); i pojedynczo ich dodawać.

A kod z dodaj.php czyta i tak tylko ostatnie ID usera z bazy danych. Nie widzi reszty, tak jak by była to już osobna sesja

0
  1. A na jakiej podstawie miałby widzieć, ostatnie ID to jest ostatnie ID - jedno.
  2. Cały kod za każdym razem wykonuje się od nowa, więc zmienna oczywiście się zeruje - to jest, jak to nazwałeś, osobna sesja!
    Ale nie rozumiem. Chcesz na bieżąco do listy wyświetlanej na stronie dodawać nowododanych userów. Twój dodaj.php zwraca Ci info o JEDNYM ostatnio dodanym userze - te dane powinieneś dokleić do istniejącej listy userów w momencie jak otrzymujesz zwrot z żądania ajax. Jeżeli coś takiego robisz to nie wiem wciąż w czym tkwi problem?
0

ad 2) Dokładnie tak chcę zrobić, ale nie wiem jak ten efekt uzyskać? Bo w dodaj.php mam na początku inserta i on działa, teraz pozostaje sama kwestia wyświetlenia, bo z tym mam problem. jak włączam stronę index.php, dodaje pierwszego user'a, jest ok wyświetla się po zamknięciu dialog(), dodaje kolejnego, wszystko ładnie zapisuje sie w bazie danych, ale z wyświetleniem wyników na index.php pojawia się tego typu problem, że nie pokazuje całej listy dodanych user'ów,a tylko tego ostatnio dodanego user'a. Twój myk z implodem() nie pojdzie, bo to nowa sesja... jquery ui dialog(). Dodam poźniej cały kod

0

Zadziwia mnie jak bardzo nie rozumiesz własnego kodu...

Czyli ty nie masz problemu z ajaxem tylko z wyświetleniem listy po odświeżeniu strony? Czyli nie potrafisz wyświetlić więcej niż jednego wiersza z zapytania SELECT.
Wrzuć index.php i tę bibliotekę, którą obsługujesz bazę danych.

0

tak, w sumie to tak jest, mam problem z wyświetleniem. ok, poprawie kod, żeby był maxymalnie czytelny i wrzucę wszystko, ale to za jakąś 1-2 h

0

index.php
http://codetidy.com/3854/

ajax.js
http://codetidy.com/3855/

reverse.php (czyli te dodaj.php)
http://codetidy.com/3856/

cały kod... trochę spaghetti code, ale jest :D

0

noo i dalej nie zrobiłem :( jest to dla mnie ważne, czy wie ktoś jak to zrobić ??

0

KOSZ, już dawno po problemie i zero konkretów w wątków :p

1 użytkowników online, w tym zalogowanych: 0, gości: 1