Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [advAjax + JSON] Jak przekazać wiele parametrów z jakiegoś obiektu?
Forum PHP.pl > Forum > XML, AJAX > AJAX
xamil
I znowu mam lamerskie pytanie:/

Mamy taki o to kod (WIKI):
Kod
advAJAX.get({
    url: "http://www.example.com/page.html",
    parameters : {
      "var1" : "value1",
      "var2" : "value2"
    },
    onSuccess : function(obj) { alert(obj.responseText); },
    onError : function(obj) { alert("Error: " + obj.status); },
    "var3" : "value3"
});
Wszystko fajnie ale jak przed wysłaniem request'a odczytać jakieś x parametrów i przekazać je do requesta?
Przypuszczam, że pomocne będzie tu zdażenie onInitialization w którym mógłbym coś takiego zrobić ale nie wiem jak w nim przekazać jakieś parametry które pójdą razem z requestem. Czyli jak przekazać coś jak "parameters" z przykładu w trakcie zdażenia onInitialization do requesta?


Nikt nie ma pomysłu? To w sumie jest bardzo ważna i przydatna funkcjonalność. Nie da się czegoś takiego zrobić?
mike
Upchnij to w funkcję a potem ją wywołaj.

Na przykład:
Kod
function editLabel( strMode, intLabelId )
{
    advAJAX.get({
        url: "?module=Labels&action=EditLabel",
        "strMode" : strMode,
        "labelId" : intLabelId,
        onSuccess : function( obj )
                    {
                       document.getElementById( 'contentContainer' ).innerHTML = obj.responseText;
                    },
        onError : function( obj )
                  {
                      document.getElementById( 'contentContainer' ).innerHTML = 'Nie udało się wczytać danych.';
                  }
    });

    return false;
}
xamil
Dzięki bardzo za odzew ale nie bardzo rozumiem jak to ma pomóc. Bo ja np. nie wiem czy to będzie jeden parametr czy 10. Może innaczej bo w sumie to nie wiem jak się wysłowić z tym co chce zrobić;)
Czasem kod ma odzwierciedlać coś takiego:
Kod
advAJAX.get({
    url: "http://www.example.com/page.html",
    parameters : {
      "var1" : "value1",
      "var2" : "value2"
    },
    onSuccess : function(obj) { alert(obj.responseText); },
});
A czasem coś takiego:
Kod
advAJAX.get({
    url: "http://www.example.com/page.html",
    parameters : {
      "var1" : "value1",
      "var2" : "value2"
      "var3" : "value3"
      "var4" : "value4"
      "var5" : "value5"
      "var6" : "value6"
    },
    onSuccess : function(obj) { alert(obj.responseText); },
});
Czyli liczba parametrów jest zmienna bo np. pobieram je z jakiejś tablicy. Po prostu nie wiem jak np. łączyć jakieś bloki JSON. Czyli czy jest np. możliwość stworzenia czegoś w tym stylu:
Kod
var json=''
for(i=0; i<tablica.length;i++) {
    json=json+'{\"var'+i+'\" : \"'+tablica[i]+'\"}'
}
advAJAX.get({
    url: "http://www.example.com/page.html",
    parameters : {
+json+
    },
    onSuccess : function(obj) { alert(obj.responseText); },
});
Wiem, wiem herezja ale moze oddałem idee;)

W teorii jeśli by to była czysto tablica to mógłbym odpowiednio link spreparować i taki link wkleić do requesta advAjax ale wydaj mie się to nie ładnym rozwiązaniem.
mike
Ku kurcze, jak nie wiesz ile będzie elementów to nie rób ich list bardzo długiej, tylko sobie tablice prześlij.
xamil
Ok to teraz już całkiem głupie pytanie. Jak przesłać tablice?winksmiley.jpg

Spróbowałem czegoś takiego:
Kod
zenek=new Array('aa','bb','cc')
advAJAX.post({
    url: "http://www.example.com/page.html",
    parameters : {
      "zenek" : zenek
    },
    onSuccess : function(obj) { alert(obj.responseText); },
});

Wtyczka do ff - firebug - pokazała mi ze postem zostało posłane coś takiego:
Kod
zenek=aa&zenek=bb&zenek=cc
No i niestety w $_REQUEST php słusznie się pojawiło, coś takiego
Kod
["zenek"]=>  string(2) "cc"
Czyli po prostu przypisał tablicy zenek tylko ostatnią warstość w ciągu bo jak już coś to powinno być
Kod
zenek[]=aa&zenek[]=bb&zenek[]=cc

Czyli ponawiam pyatnie. Jak przesłać tablicę?

Poza tym o ile na tą chwile ewentualne posłanie tablicy wchodzi w grę o tyle fakt posłania różnej ilości nie znanych w momencie definiowania parametrów napewno też może być potrzebna. Czyli nie, że sobie wrzuce do jednej tablicy wszystkie parametry i wyciągając z REQUEST będę musiał je najpierw wyciągnąć z tej tablicy tylko, ze te parametry będą dostępne bezpośrednio w $_REQUEST


Dobra ostatni raz się przypominam o mojej sprawie;) Czy ktoś może mi powiedzieć czy da się coś takiego zrobić czy się nie da? Nie da się to ok ale niech ktoś to powie bo tak to będę w nieskończoność szukał i się zastanawiałwinksmiley.jpg
mike
AdvancedAJAX 1.1.2 - AJAX + JSON
Cytat
(...) pozwala na korzystanie z serializacji JSON na zmiennych każdego typu, dostępnych w JavaScript, wliczając tablice (array) i obiekty (object) (...)
xamil
Cytat
["c"]=>
string(7) "[3,2,1]"
["d"]=>
string(22) "{"d1":4,"d2":5,"d3":6}"
Nie rozumiem tego. Może źle myślę ale przecież nadal nie otrzymuję w php tablicy? Jak źle myślę to czy może mi ktoś to łopatologicznie objaśnić?

--

Może jeszcze innaczej. Mam funkcję ogólną wykonującą zapytania:
  1. <?php
  2. function ajaxGo(act,parameters) {
  3. advAJAX.post({"act":act})
  4. }
  5. ?>

Pozostałe rzeczy mam ustawione przez metodę advAJAX.setDefaultParameters dzięki czemu nie muszę 30 razy pisać tego samego. Są jednak zapytania które wymagają np. jakiejś dodatkowej operacji po wykonaniu zapytania. Stąd zmienna parameters. Chciałbym moć w niej podać jako JSON inne parametry np. całą funkcję OnSuccess.
Kod
onSuccess : function(obj) { alert('działa'); }


No i jak to przekazać do wywołania advAJAX.post z pierwszego przykładu?
060156
Cytat(xamil @ 10.08.2006, 06:47:29 ) *
Dzięki bardzo za odzew ale nie bardzo rozumiem jak to ma pomóc. Bo ja np. nie wiem czy to będzie jeden parametr czy 10. Może innaczej bo w sumie to nie wiem jak się wysłowić z tym co chce zrobić;)
Czasem kod ma odzwierciedlać coś takiego:
Kod
advAJAX.get({
    url: "http://www.example.com/page.html",
    parameters : {
      "var1" : "value1",
      "var2" : "value2"
    },
    onSuccess : function(obj) { alert(obj.responseText); },
});
A czasem coś takiego:
Kod
advAJAX.get({
    url: "http://www.example.com/page.html",
    parameters : {
      "var1" : "value1",
      "var2" : "value2"
      "var3" : "value3"
      "var4" : "value4"
      "var5" : "value5"
      "var6" : "value6"
    },
    onSuccess : function(obj) { alert(obj.responseText); },
});
Czyli liczba parametrów jest zmienna bo np. pobieram je z jakiejś tablicy. Po prostu nie wiem jak np. łączyć jakieś bloki JSON. Czyli czy jest np. możliwość stworzenia czegoś w tym stylu:
Kod
var json=''
for(i=0; i<tablica.length;i++) {
    json=json+'{\"var'+i+'\" : \"'+tablica[i]+'\"}'
}
advAJAX.get({
    url: "http://www.example.com/page.html",
    parameters : {
+json+
    },
    onSuccess : function(obj) { alert(obj.responseText); },
});
Wiem, wiem herezja ale moze oddałem idee;)

W teorii jeśli by to była czysto tablica to mógłbym odpowiednio link spreparować i taki link wkleić do requesta advAjax ale wydaj mie się to nie ładnym rozwiązaniem.

No wlasnie to jest problem z podjeciem prototype, ktory w takich sytuacjach zawodzi i komplikuje
rozwiazanie ....
Juz dawno zrezygnowalem z tego podjecia, bo przy bardziej zlozonych objektach sa tylko problemy ..
xamil
Dobra ja niestety nie jestem zbyt dobry w te klocki więc za bardzo nie wiem o co chodzi. Jedyne co potrzebuje to dwie odpowiedzi

1. Czy da sie tak zrobić a jak się da to jak?
2. Jeśli się nie da to co zrobic aby się dało (albo jak obejść problem)?

p.s. Dzięk za odzew... temat moze juz stary ale dalej nie mam rozwiązania i robię to baaardzo na około.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.