konto usunięte

Temat: [zend] czy to juz ajax? :)

Hej!

Kombinuje i nie wiem, czy dobrze to rozegrałem, potrzebuje chyba paru sugestii.

Mam mapę googla, bazę z markerami, stronę na której jest mapa, ukryty iframe i kontroler ktory nazwalem sobie ajax.

jak przesuwam marker, to listener z gmaps zmienia wartosci dwoch ukrytych pol formularza pod mapa (szerokosc i dlugosc geograficzna) a nastepnie robi submit na ukrytego iframe'a. jako akcje formularz ma podany /ajax/coords/ gdzie wrzucane są przesłane GET'em koordynaty do bazy. kontroler ajax ma wylaczone renderowanie skryptow i layoutow, zwraca jedynie OK lub ERROR do ramki.

Czy to juz ajax? smile.gif I czy sa zgrabniejsze rozwiazania?

sorki za cross ;)
Przemek Szalko

Przemek Szalko iOS Developer + Full
Stack Developer

Temat: [zend] czy to juz ajax? :)

1. Jest (A)synchronicznie? jest
2. Jest z wykorzystaniem (JA)vascript? jest
3. Zwraca (X)ML? nie

Gratuluję, masz na stronie AJA ;)

A tak na poważnie, to punktem 3 się nie przejmuj bo oprócz XML popularnymi formatami odpowiedzi są również zwykły tekst, html albo JSON.

Twoje rozwiązanie jest nieco toporne, można je trochę ładniej napisać. Dane z mapki nie muszą być zapisywane w formularzu, zbędne jest również wykorzystanie ukrytego iframe.

Dane z google maps można od razu przesłać do kontrolera (GETem lub POSTem) bez zapisywania ich w formularzu.

Nie wiem czy korzystasz z jakiegoś frameworka do JavaScript. Jeśli nie to polecam przyjrzeć się jakiemuś. Przykładowo w jQuery jest bardzo ułatwione wysyłanie zapytań GET i POST. Więcej w dokumentacji jQuery i AJAX

konto usunięte

Temat: [zend] czy to juz ajax? :)

Dzieki Przemku za podpowiedz. Faktycznie, zaczynam rozgladac sie w
JQuery. Jedna linia kodu zalatwila mi problem, wywalilem iframe'a i formularz. Dziala teraz jeszcze lepiej :)

Mam natomiast troszkę inny problem obecnie:

Tak wygląda mój kod:


<script type="text/javascript">

function initialize() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map_canvas"));
var lat = '<?= $this->geo_lat;?>';
var lon = '<?= $this->geo_long;?>';
var punkt = new GLatLng(lat, lon);
var marker = new GMarker(punkt, {draggable: true});
var coordsform = document.getElementById("coordsform");

map.setCenter(punkt, 13);
map.addOverlay(marker);

GEvent.addListener(marker, "dragend", function() {
$.post("/zf/ajax/coords/", {lat: marker.getPoint().y, lon: marker.getPoint().x}, function(data){
if(data != "OK") {
alert("Data Loaded: " + data);
}
});


});
}
}
$(document).ready(function() {
initialize();
});
</script>


a tak wygląda sama mapa po załadowaniu. Nie ważne jakie dam koordynaty: marker laduje w gornym lewym rogu (zobaczyć go można po przesunięciu mapy), a pozostałe kafelki mapy dopiero po chwili i przesunięciu się ładują.


Obrazek


To samo w nowym FF i IE 7.

Jedyne co jest "nietypowe", to że dałem deklaracje funkcji initialize w ramach <body> i tam ją wywołuję przez jQuery po załadowaniu dokumentu, a z taga <body> wywalilem onLoad.

A doszedłem przed chwilą do jeszcze jednej śmiesznej rzeczy. W FF jeśli wejdę na adres w ten sposob:

strona/index.php


to faktycznie gmap ma błędy

natomiast jezeli wejde o tak:

strona/index.php#mapa


(czyli przechodząc do anchora z divem, gdzie jest mapa) to wszystko laduje sie ok. taby robione są za pomocą jQueryUI, czy jest miedzy nim a gmaps jakis konflikt?Grzegorz Kaszuba edytował(a) ten post dnia 30.07.09 o godzinie 11:26
Przemek Szalko

Przemek Szalko iOS Developer + Full
Stack Developer

Temat: [zend] czy to juz ajax? :)

W sumie nie spotkałem się jeszcze z takim problemem..

Jedyne co przychodzi mi do głowy to to, że za szybko inicjujesz mapę.

Gdy zakładka z mapą nie jest odkryta elementy DOM są już załadowane, a więc funkcja $(document).ready(); się wykonuje, natomiast obrazki nie są pobierane przez przeglądarkę, bo nie są w tej chwili widoczne. Spróbuj wstawić inicjację mapy tak aby wykonała się jednorazowo po kliknięciu w zakładkę "Mapa".

Przydałby się link żeby powiedzieć coś więcej. Możesz wysłać na priv jeśli masz super tajny projekt :)

konto usunięte

Temat: [zend] czy to juz ajax? :)

Robię na localhoscie, a ze to na zendzie i masie innych pierdółek to zanim wrzuce na serwer minie pare godzin :D Ale poszukam opóźnień w/g Twoich porad i pozmieniam kolejnosci ladowania skryptow itd. i dam znać jaki efekt.

konto usunięte

Temat: [zend] czy to juz ajax? :)

Możesz zrobic tak

$("#link").live("click",function(){

tutaj wstaw całą inicjalizację.

});

Live masz opisane tutaj http://docs.jquery.com/Events/live

konto usunięte

Temat: [zend] czy to juz ajax? :)

Znalazłem rozwiązanie: wystarczało do obiektu gmap2 dodać parametr

var map = new GMap2(document.getElementById("map_canvas"),{size:new GSize(500,300)});

konto usunięte

Temat: [zend] czy to juz ajax? :)

Btw. co do wcześniejszego rozwiązania, było ono stosowane przed "wynalezieniem" AJAX'a, czyli jakoś przed 2000 rokiem :-)

konto usunięte

Temat: [zend] czy to juz ajax? :)

Zdarza mi się czasem wynaleźć koło na nowo, które ktoś już wynalazł ;) Wina po mojej stronie, bo się trendami nie interesuję, choć staram się nadrabiać zaległości. To raczej też dlatego, że na dłuższą metę nie lubię używać gotowych rozwiązań jeśli ich nie rozumiem... A bądź co bądź - wywarzanie otwartych drzwi to strata czasu ale za to mocna baza teoretyczna, hehe :D

Następna dyskusja:

zend czy symfony?




Wyślij zaproszenie do