Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][AJAX] xajax nie widzi tablicy(?)
Forum PHP.pl > Forum > Przedszkole
peter13135
dąże do tego aby w moim skrypcie zrobić newsy za pomocą xajaxa, aby nie trzeba było za każdym razem przeładowywać strony, skrypt jest oparty na o bazę MySQL

w dużym skrócie wygląda on w ten sposób

index.php
  1. <?php
  2. include 'includes/conf.php';
  3. include 'includes/conf.php';
  4. require_once("xajax_core/xajax.inc.php");
  5. $xajax = new xajax();
  6.  
  7. if($mode=='index')
  8. {    
  9.  $site_title.=' :: strona glowna';    
  10.  
  11.  $news=new news;//obiekt newsow
  12.  $news_links=$news->links(5);//linki do newsow
  13.  $n=$news->news();//newsy w postaci tablicy
  14.  $xajax->registerFunction("news");
  15.  function news($news_id)
  16.  {
  17.      
  18.    
  19.  
  20.      $title=$n[$news_id]['title'];//tytul newsa
  21.      $date=$n[$news_id]['date'];//data
  22.      $content=$n[$news_id]['content'];//tresc newsa  
  23.      
  24.    $objResponse = new xajaxResponse();
  25.    $objResponse->assign("title","innerHTML", 'aaaa');
  26.    $objResponse->assign("date","innerHTML", $news_id);
  27.    $objResponse->assign("news","innerHTML", $n[44]['content']);
  28.    
  29.    return $objResponse;
  30.  }  
  31. }
  32. ?>


linki wyglądają w taki sposób
  1. <a onclick="xajax_news(44)" title="test znakow">test znakow</a>



to $n jest to tablica newsów, pod print_r wygląda tak

  1. <?php
  2. (
  3.    [44] => Array
  4.        (
  5.            [title] => test znakow
  6.            [content] => &#281;€ółśążźćń
  7.            [date] => 2009-03-24
  8.        )
  9.  
  10.    [45] => Array
  11.        (
  12.            [title] => blabla
  13.            [content] => lalallalala
  14.            [date] => 2009-03-25
  15.        )
  16.  
  17. )
  18. ?>


problem w tym że po kliknięciu na link, wyświetla mi sie tylko to aaaa oraz zmienna $news_id,
a $n[44]['content'] niechce sie wyświetlić, mimo że ona istnieje, gdy zrobie
  1. <?php
  2. echo $n[44]['content']
  3. ?>

to sie wyświetla poprawnie, podobnie rzecz sie dzieje z
$n[44]['date']
$n[44]['title'] czy
$n[$news_id]['content']

nikt nie pomoże ?

tutaj macie live smile.gif www.ph.xaa.pl/test
a pod tym linkiem coś w stylu małego shella, abyście mogli zobaczyć cały skrypt
nazwe pliku trzeba ustawić w adresie
http://ph.xaa.pl/test/source.php?file=index.php

PS. jakbyście przy okazji znaleźli inne błędy to również proszę o ich wskazanie
osl
ta zmienna $n to jakaś globalna? bo jej nie specjalnie widzę w ciele funkcji...
tego print_r czy echo robisz w funkcji czy poza nią?
peter13135
zobacz sobie teraz, dałem na samym końcu skryptu, w źródle strony możesz zobaczyć jak ta tablica wygląda
osl
no to nie dziw się, że wydaje się ok. zrób to samo w treści funkcji a się okaże, że zmienna $n to NULL... poczytaj o zasięgu zmiennych winksmiley.jpg
peter13135
heh, no teraz działa

ale mam zapytanie biggrin.gif

w klasie news mam miedzy innymi metodę która robi mi te linki do newsów, oraz metodę która zwraca mi tablicę z newsami, z jednej metody korzystam poza funkcją, a z drugiej metody korzystam w tej ajaxowej funkcji,

w związku z tym, czy mam tworzyć 2 obiekty newsów questionmark.gif jeden w funkcji, drugi poza funkcją ?
osl
to jest akurat kwestia użycia. zasadniczo jeśli można, to warto przekazać instancje klasy jako parametr funkcji zamiast pobierać ją w kółko. Tutaj ten pomysł nie przejdzie, bo z tego co rozumiem (daaawno nie siedziałem na xajaxie), wywołujesz funkcje news() ajaxem, więc ciężko tam będzie wrzucić obiekt jako parametr winksmiley.jpg

Tak więc jeśli Ci są oba wywołania potrzebne w sumie w dwóch różnych miejscach (z punktu widzenia interpretera php), to chyba 2 obiekty powinny być. chyba że dasz rade coś pokombinować... albo ktoś inny ma jakiś pomysł, ja po prostu nie pamiętam już tak dobrze filozofi xajaxa winksmiley.jpg
peter13135
  1. <?php
  2. $news=new news;//obiekt newsow
  3.  $news_links=$news->links(5);//linki do newsow
  4.  $n=$news->news();//news w postaci tablicy
  5.  $xajax->registerFunction("news");
  6.  function news($news_id)
  7.  {
  8.      global $n;
  9.  
  10.  
  11.      $title=$n[$news_id]['title'];//tytul newsa
  12.      $date=$n[$news_id]['date'];//data
  13.      $content=$n[$news_id]['content'];//tresc newsa  
  14.      
  15.    $objResponse = new xajaxResponse();
  16.    $objResponse->assign("title","innerHTML", $title);
  17.    $objResponse->assign("date","innerHTML", $date);
  18.    $objResponse->assign("news","innerHTML", $content);
  19.    
  20.    return $objResponse;
  21.  }
  22. ?>


zrobiłem tak i działa
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.