Hledáme Nette programátory a kolegy - super tým i plat
Zobrazují se odpovědi 1 až 11 z 11

Ajax, Javascript - prikladek

  1. Ahojda,

    mate nekdo z vas hotovy Ajaxik, kdy mam formular a jako prvni si dam IČO, po onblur mi to přes ajax načte, naparsuje a vloží do formuláře zbylá políčka (Dič, jméno/název, ulice číslo, město, psč)? Případně vysvětlit, jak to spolehlivě postavit...

    Načte je klasicky odsud:
    wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico=27074358
    (vrací už rovnou XML)

    Může to být tedy čistě JS (client side), případně PHP server side...

    Díky za tipy...

    ---------- Příspěvek doplněn 09.08.2010 v 17:43 ----------

    NIKDO NIC?

    Ok, tak kazdemu kdo odpovi do SZ nebo sem davam reputaci.

    Do SZ muzete i napsat pozadavek financni (s odkazem nekam, kde to chodi).

    Chtel jsem tim usetrit praci lidem objednavajicim, ze jim to predvyplni udaje.
    Naposledy upravil One : 08.08.2010 v 01:14

  2. Happy Robot :]
  3. Ahoj, ono to úplně (jen) na straně JavaScpritu. Kvůli cross-site scripting policy totiž není možné (ve většině prohlížečů) volat Ajax request z jedné domény na druhou. Je několik způsobů, jak se to obchází.

    1. iFrame
    2. PHP gateway, která je na stejné doméně

    Sepsal jsem ti to hodně zhruba, spíš abys to pochopil a předělal sis to. Používá to jQuery (asi znáš)

    Tohle je ten "plugin", stáhne XML rozparsuje a udělá z něj objekt.

    PHP kód:
    //jquery.ares.js
    (function($) {
            $.
    ares = function(idNumberoptions) {
                var 
    defaults = {
                    
    url'http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico=--idNumber--',
                    
    gateway'ajax-gateway.php?url=--url--',
                    
    finishednull
                    
    notfoundnull,
                };

                var 
    opts = $.extend(defaultsoptions);
                
                var 
    url opts.gateway.replace('--url--'
                            
    opts.url.replace('--idNumber--'idNumber));
                
                $.
    get(url, function(data) {
                    var 
    xml = $(data);
                    if (
    xml.find('D\\:E').length == 1) {
                        
    // Chyba!
                        
    if ($.isFunction(opts.notfound)) {
                            
    opts.notfound.call(this);
                        } 
                    } else {
                        if ($.
    isFunction(opts.finished)) {
                            var 
    obj = {};
                            
    obj.idNumber xml.find('D\\:ICO').html();
                            
    obj.vatNumber xml.find('D\\:DIC').html();
                            
    obj.name xml.find('D\\:OF').html();
                            
    obj.country xml.find('D\\:NS').html();
                            
    obj.city xml.find('D\\:N').html();
                            
    obj.cityPart xml.find('D\\:NCO').html();
                            
    obj.street xml.find('D\\:NU').html() + ' ' xml.find('D\\:CD').html();
                            if (
    xml.find('D\\:CO').html().trim() != '') {
                                
    obj.street += '/' xml.find('D\\:CO').html();  
                            }                    
                            
    obj.postalCode xml.find('D\\:PSC').html();
                            
    opts.finished.call(thisobj);
                        }
                    }
                });

            }        
    })(
    jQuery); 
    Tady je gateway pro stahování obsahu stránek (XML z ares), to je snad úplně jasné

    PHP kód:
    // ajax-gateway.php
    <?php
    echo file_get_contents($_GET['url']);
    No a tady je ukázka, jak se to používá

    PHP kód:
    // index.html
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" lang="cs" xml:lang="cs">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta http-equiv="Content-Language" content="cs" />
        <title>jQuery + Ares</title>
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
        <script type="text/javascript" src="jquery.ares.js"></script>
        <script type="text/javascript">
            $('document').ready(function() {
                $('#submit').bind('click', function(event) {
                    $.ares($('#ic').val(), {
                        notfound: function() {
                            alert('Tak tohle IC asi neexistuje!');
                        },
                        finished: function(object) {
                            $('#result').html('');
                            for (x in object) {
                                var row = $('<span>' + x + ' - <strong>' + object[x] + '</strong><br /></span>');
                                $('#result').append(row);    
                            }  
                        }
                    });
                });
            });
        </script>
    </head>
    <body>
        <h1>Ares & jQuery</h1>
        <label for="ic">IČ</label>&nbsp;
        <input type="text" id="ic" name="ic" value="" />&nbsp;    
        <input type="button" value="Prověřit Ares" id="submit" />    
        <div id="result" style="margin-top: 10px;">
        </div>
    </body>
    </html>
    Celé dohromady si to můžeš prohlédnout tady: http://public.trunecek.net/ares/

    Kdyby něco, ptej se ;).

  4. ja bych to rozdelil na php cast a js cast - php cast by parsovala wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico=27074358 a vracela ti json a nebo rovnou html,
    js cast pak uz jenom vola tu php cast a mas to - v javascriptu ses prece jenom trosku vic omezenejsi nez v php a krom toho zbytecne neposilas traffix navic.

    php cast by pak zacinala nejak takhle:
    PHP kód:
    $xml simplexml_load_file "http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico=27074358" );

    foreach ( 
    $xml -> xpath "prislusny xpath dotaz" ) as $el )
      
    //naplneni vystupu 
    shodou okolnosti to mozna budu dneska implementovat, tak to sem pak mozna supnu ;)

  5. trunda: diky, jak bude cas tak to zkusim...

    nekolik pripominek, zkuste to okomentovat:
    - priklad na tvym webu v IE hodi chybu (nejde, ale to mi dela na vice webech, nevim zda je to jen mojim IE anebo IE obecne nebo cim...?) a v Mozille vyskoci popup, kdyz ico neexistuje, kdybys naplnil ty data, tak by to bylo supeer:-)

    PHP kód:
    <fieldset>
    <
    legend>Informace o firmě</legend>
    <
    label class="inputLabel" for="taxid">:</label>
    <
    input id="taxid" maxLength="30" size="31" type="text" name="taxid"><label class="inputLabel" for="company"><br>
    Název firmy:</label>
    <
    input id="company" maxLength="192" size="41" type="text" name="company">
    <
    br class="clearBoth">
    <
    label class="inputLabel" for="taxid2">DIČ:</label>
    <
    input id="taxid2" maxLength="60" size="41" type="text" name="taxid2"></fieldset>
    <
    fieldset>
    <
    legend>Vaše osobní informace</legend>
    <
    label class="inputLabel" for="firstname">Jméno:</label>
    <
    input id="firstname" maxLength="96" size="41" type="text" name="firstname"><br class="clearBoth">
    <
    label class="inputLabel" for="lastname">Příjmení:</label>
    <
    input id="lastname" maxLength="96" size="41" type="text" name="lastname"><br class="clearBoth">
    <
    label class="inputLabel" for="street-address">Ulice a číslo:</label>
    <
    input id="street-address" maxLength="192" size="41" type="text" name="street_address"><br class="clearBoth">
    <
    label class="inputLabel" for="city">Město:</label>
    <
    input id="city" maxLength="96" size="41" type="text" name="city"><br class="clearBoth">
    <
    label class="inputLabel" for="postcode">PSČ:</label>
    <
    input id="postcode" maxLength="30" size="31" type="text" name="postcode"></fieldset
    - pro JS hovori mmj. to, ze pocet dotazu na ares je (z jedne IP) omezen, hlidan (pokud by vas chtel nekdo blokovat, tak to muze "zneuzit")

    - ajax-gateway.php - by mozna chtelo nejak ochranit, aby to nekdo nezneuzil a netahal pres to neco jineho? to je vlastne anonymni proxy, jak na to koukam :)

    - ta JS knihovna, sice ji neznam, ale to nevadi, jen me napadlo, kolik ma kB? Aby me treba uzivatele mobilniho pripojeni (Gprs) kvuli 200kB nezakousli, pokud se z toho pouziva jen nejaka malicka cast? Ale to asi pujde vytahnout, no uvidime...


    vedouci: tak jak jsi implementoval, pochlub se :-))

    Diky..

  6. nakonec nijak, jsou bohuzel dulezitejsi veci

  7. Ahoj, mrknu na to, co jsi chtěl a doplním odpovědi. Snad dnes, nebo zítra.

  8. tak to by bylo fajne :)

  9. Zdravím. Skript funguje pěkně http://public.trunecek.net/ares/ , ale zdá se, že to hází chybu a nenačítá z Registru ŽP. Když je to z OR jede to ok. Nevíte, kde by mohla být chyby, jiné tagy?

    Díky za tip, jak to opravit.

    Kód:
    Chyby JS: 
    Chyba: xml.find("D\\:CO").html() is null
    Zdrojový soubor: http://public.trunecek.net/ares/jquery.ares.js
    Řádek: 32


    ---------- Příspěvek doplněn 10.09.2010 v 19:55 ----------

    Po opravě tohoto řádku
    Kód:
    if (xml.find('D\\:CO').html() != '') {
    takto

    Kód:
    if (xml.find('D\\:CO').html() != null) {
    to už funguje. Nevím ovšem jestli je to správně.

  10. Ano, máš to správně s NULL.

  11. Zdravím, jak už psal One - script nefunguje v IE, dokázal by někdo najít chybu? Docela by se mi to hodilo. Díky.

  12. Ahoj, vím, že je to trochu pozdě, ale ...

    Problém je v tom, že IE nemá metodu trim u objektu string. Dá se to vyřešit globálně tak, že někam na začátek tvých skriptů umístíš:

    Kód:
    if(typeof String.prototype.trim !== 'function') {
      String.prototype.trim = function() {
        return this.replace(/^\s+|\s+$/g, ''); 
      }
    }
    a nebo použiješ trim z jQuery: http://api.jquery.com/jQuery.trim/, pak by výsledný kód vypadal následovně:

    Kód:
    //jquery.ares.js 
    (function($) { 
            $.ares = function(idNumber, options) { 
                var defaults = { 
                    url: 'http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico=--idNumber--', 
                    gateway: 'ajax-gateway.php?url=--url--', 
                    finished: null,  
                    notfound: null, 
                }; 
    
                var opts = $.extend(defaults, options); 
                 
                var url = opts.gateway.replace('--url--',  
                            opts.url.replace('--idNumber--', idNumber)); 
                 
                $.get(url, function(data) { 
                    var xml = $(data); 
                    if (xml.find('D\\:E').length == 1) { 
                        // Chyba! 
                        if ($.isFunction(opts.notfound)) { 
                            opts.notfound.call(this); 
                        }  
                    } else { 
                        if ($.isFunction(opts.finished)) { 
                            var obj = {}; 
                            obj.idNumber = xml.find('D\\:ICO').html(); 
                            obj.vatNumber = xml.find('D\\:DIC').html(); 
                            obj.name = xml.find('D\\:OF').html(); 
                            obj.country = xml.find('D\\:NS').html(); 
                            obj.city = xml.find('D\\:N').html(); 
                            obj.cityPart = xml.find('D\\:NCO').html(); 
                            obj.street = xml.find('D\\:NU').html() + ' ' + xml.find('D\\:CD').html(); 
                            if (xml.find('D\\:CO') != null && $.trim(xml.find('D\\:CO').html()) != '') { 
                                obj.street += '/' + xml.find('D\\:CO').html();   
                            }                     
                            obj.postalCode = xml.find('D\\:PSC').html(); 
                            opts.finished.call(this, obj); 
                        } 
                    } 
                }); 
    
            }         
    })(jQuery);
    Naposledy upravil Trunda : 19.12.2011 v 10:51

Podobná témata

  1. PHP & MySQL & Javascript (ajax)
    By Neznámý :) in forum PHP
    Odpovědí: 8
    Poslední příspěvek: 17.02.2009, 12:08
  2. Ajax + javascript + IE + php = PROBLÉM
    By Hummel in forum Javascript
    Odpovědí: 2
    Poslední příspěvek: 11.06.2008, 10:04
Hostujeme u Server powered by TELE3