Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] Append and php
Forum PHP.pl > Forum > XML, AJAX
devurien
Witam,

mam sobie:
Kod
append("<input type='text' value='' />");
i teraz chciałbym aby z poziomu javascriptu użyć klasy w php, która coś tam zwraca i wrzuca do value. Czy jest to w ogole możliwe? Jak to ugryźć?

Próbowałem 
Kod
append("<input type='text' value='<?php $view= new dbRecords(); echo $view->getPosition(); ?>' />");
lord_t
Musisz użyć ajaxu. Dokumentacja jquery ajax.
devurien
Ok świetnie, ale co jeśli - tu się będę posiłkować kodem:

  1.  
  2. for (var i=0; i < selectedVar; i++){
  3. var targetUrl = "test2.php?id=p200_"+i+"a";
  4. var getData = $("div#s1").load(targetUrl);
  5. $("div#s1").attr('value', getData);
  6.  
  7. $("div#s1").append("<p><label>"+a+"st:</label> <select name='p200_1_"+i+"a'><option>Please select</option> <option>0</option><option>1</option><option>2</option><option>3</option><option>4</option><option>More</option></select><br /><label>"+a+"st:</label> <input type='text'name='p200_"+i+"b"' value='' /></p>");
  8. a++;
  9. }


Pola są generowane w pętli. Name inputa/selecta - dobierane automatycznie. Nie udaje mi się odpytać zewnętrznego skryptu i podstawić wartości do pola value.
Jakieś wskazówki Panowie?
lord_t
Nie wpisuje, bo do getData przypisujesz odwołanie do elementu div. Do funkcji load przekaż także funkcję:

Kod
function(odp){
w odp będziesz miał swoją wartość zwróconą przez ajaxa. Tu wklej sobie kod z appendem
}


PS. o ile widze a jest zawsze rowne i+1, może więc wyrzuć to a i zastąp je i+1.
devurien
lord_t dziękuje Ci za poświęcony czas nie mniej Googlowałem troszkę i widzę, że load() bywa zawsze przypisany do jakiegoś div'a hm, a ja nie umiem jeszcze inaczej niż szablonowo myśleć..
Wyszedł mi takowy dziwoląg - po twoich sugestiach lecz chyba źle je interpretuję:
Kod
            for (var i=0; i < selectedVar; i++){
                var targetUrl = "test2.php?number="+i+;
                var getData = load(targetUrl,
                    function(odp) {
                        $("div#wklej").append("<p><label>"+i+1+"st:</label> <select name='p200_1_"+i+"a'><option>0</option</select><br /> <label>"+a+"st:</label> <input type='text'name='p200_"+i+"b' value="+odp+"/></p>");
                    });
            }

--EDIT:
tutaj podaje Cały listing: http://wklej.to/DQrM
lord_t
I bardzo dobrze kombinujesz. Fakt, load() musi być do czegoś przypisany, ale get() nie (loadem to się też da załatwić, ale nie chce mi się pisać jak) i zrobimy to getem:zamiast słowa load użyj po prostu get a tą część: var getData = usuń i powinno banglać.
Na 99% pojawi się niestety kolejny problem związany ze zmienną i - wszędzie będzie mieć wartość z ostatniej pętli.
Powinna Ci pomóc tak napisana funkcja:
Kod
function(odp) {
var j=i;
$("div#wklej").append("<p><label>"+j+1+"st:</label> <select name='p200_1_"+j+"a'><option>0</option</select><br /> <label>"+j+1+"st:</label> <input type='text'name='p200_"+j+"b' value="+odp+"/></p>");
                    }
devurien
Witam,

jest dokładnie tak jak przewidziałeś pojawił się problem ze zmienną i. Niestety zabieg var i=j; nie przynosi skutku, również problem wystąpił przy +odp+ - wartość ta wskazuje cały czas ostatni rekord. Próbowałem się z tym sam pomęczyć coby nie nadużywać hojności w pomocy. Nie mniej moje doczytywania i szperania po google nie były owocne - niestety nic mądrego nie wniosły.

test.php
Kod
<html>
<head>
    <TITLE></TITLE>
    <script src="files/js/jquery.min.js"></script>

    <script type="text/javascript">
    $(document).ready(function(){

        $("select").change(function ()
        {
        var selectedVar = $('option:selected', $(this)).text();
        var selectName = $(this).attr("id");

            if(selectName == 's1') {
                for (var i=0; i < selectedVar; i++){
                    $("#wklej").children("p").remove();
                }
                for (var i=0; i < selectedVar; i++){
                    var targetUrl = "test2.php?number="+i;
                    $.get(targetUrl,
                        function(odp) {
                        var j=i;
                            $("#wklej").append("<p>"+j+1+"<input type='text' name='p200_"+j+"b' value='"+odp+"' /></p>");
                        });
                }
            return false;
            }else if(selectName == 'Please select')  {
                for (var i=0; i < selectedVar; i++){
                    $("#wklej").children("p").remove();
                }
            }
        });
    });
    </script>
</head>
<body>
<form method="get" action="test.php" >
    <select name="s1" id="s1">
        <option>Please select</option>
        <option>1</option>
        <option>2</option>
        <option>3</option>
        <option>4</option>
        <option>5</option>
        <inpu type="submit" value="OK" />
    </select>
</form>

    <div id="wklej"></div>
</body>
</html>


  1. <?php
  2. class product {
  3. private $source;
  4.  
  5. public function getData($id) {
  6. if($id == 0) {
  7. $this->source="zero";
  8. }
  9. if($id == 1) {
  10. $this->source="jeden";
  11. }
  12. if($id == 2) {
  13. $this->source="dwa";
  14. }
  15. if($id == 3) {
  16. $this->source="trzy";
  17. }
  18. if($id == 4) {
  19. $this->source="cztery";
  20. }
  21. return $this->source;
  22. }
  23. }
  24. $new = new product();
  25. if($_GET['number']) {
  26. echo $new->getData($_GET['number']);
  27. }
  28. ?>
  29.  
  30.  
  31.  
lord_t
Znalazłem!!! Ale jestem bardzo zły na autora nowej wersji dokumentacji jQuery angrysmiley.gif bo tego nie ma w nowej wersji dokumentacji - jak się napatoczy to go ugryzę.

Przeczytaj tego mojego posta (http://forum.php.pl/index.php?showtopic=12...mp;#entry604661) i zobacz jak wewnątrz ajaxa jest zdefiniowana zmienna zm i jak jest wykorzystana w success(). Zrób podobnie dla zmiennej i, dla odp tak nie rób - niestety nie mam pewności czy zabieg z i to pomoże w odp, ale bardzo możliwe, że tak. Musisz spróbować, nieuniknione będzie też chyba przejście na $.ajax() ze zwykłego $.get().
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.