Avatar billede cbdavl Nybegynder
03. august 2007 - 21:50 Der er 127 kommentarer

responseXML, has no properties

Hej,
jeg sidder lige og arbejder med at hive information ud fra en xml fil, men jeg har et lille problem. I den funktion der bliver kørt når informationen fra xml-filen er modtaget (readyState 4) går der noget helt galt og jeg får meddelelsen "xmlDOM.getElementsByTagName('name')[0].childNodes[0].nodeValue has no properties"

Her er min funktion:
function stateChanged() {
if(xmlHttp.readyState == 4 || xmlHttp.readyState == 'complete') {
var xmlDOM = xmlHttp.responseXML.documentElement;
           
var oP = document.createElement('p');    oP.appendChild(xmlDOM.getElementsByTagName('name')[0].childNodes[0].nodeValue);    document.getElementById('content').appendChild(oP);
}
}

og således ser min xml fil ud:
<persons>
<person>
<name>Elisabeth</name>
<age>15</age>
</person>
<person>
<name>Sarah</name>
<age>14</age>
</person>
</persons>
Avatar billede cbdavl Nybegynder
04. august 2007 - 00:05 #1
*Bump*
Avatar billede olebole Juniormester
04. august 2007 - 00:15 #2
<ole>

Du mangler i hvertfald noget i stil med:
    <?xml version="1.0" encoding="iso-8859-1" ?>

- i toppen af dit XML-dokument. Hvis det er et dynamisk dokument (*.asp eller *.php), mangler du muligvis også en HTTP-header.

Prøv at lægge et link til XML-filen - og også gerne et eksempel, hvor du prøver at læse den

/mvh
</bole>
Avatar billede cbdavl Nybegynder
04. august 2007 - 09:57 #3
Jeg har alt det du nævner, i min (dynamiske) xml fil.
Af en eller anden grund, får jeg en anderledes fejl idag, end jeg gjorde igår, men her er filerne: http://hogalley.dk/cout/index.html , -time.phps -time.php?str=Sarah
Avatar billede cbdavl Nybegynder
04. august 2007 - 10:01 #4
Og XML-Filen, selvfølgelig: http://hogalley.dk/cout/lean.xml
Avatar billede olebole Juniormester
04. august 2007 - 14:05 #5
Det er denne 'xml' fil, der er interessant:
    http://hogalley.dk/cout/time.php?str=Sarah

- den siger:
    Parse error: syntax error, unexpected T_OBJECT_OPERATOR in /hsphere/local/home/dhare/hogalley.dk/cout/time.php on line 20
Avatar billede erikjacobsen Ekspert
04. august 2007 - 14:10 #6
Måske ret
    foreach($root as $person) {
til
    foreach($person as $root) {
Avatar billede cbdavl Nybegynder
04. august 2007 - 14:11 #7
Ja, det var det jeg mente med en ny fejl der kom - og jeg ved ikke hvorfor. Men du kan jo kigge i dens php-source fil, og se om du kan finde fejlen. Jeg er overhovedet ikke så god til DOM med php, at der er nogen chance for jeg finder fejlen.
Avatar billede olebole Juniormester
04. august 2007 - 14:12 #8
Erik har i hvertfald vist dig én fejl. Prøv at rette den  o)
Avatar billede olebole Juniormester
04. august 2007 - 14:14 #9
Undskyld ... nu balnder jeg - ligesom Erik - PHP og JavaScript sammen. Dén linje er rigtig nok ... sorry  ;o)
Avatar billede cbdavl Nybegynder
04. august 2007 - 14:15 #10
Yeah, mit tidligere indlæg (14:12:46) var jeg igang med at skrive da Erik posted sit, så jeg fik det ikke set før jeg selv havde posted:P

Nu har jeg rettet det, men det ændre intet, og så er jeg også ret så sikker på at det skal være $root as $person, da det er det jeg altid har brugt.
Avatar billede erikjacobsen Ekspert
04. august 2007 - 14:17 #11
Ja, jeg blander andre sprog ind i det. Den er go' nok som den var, haha. Det er lidt for tidligt på dagen til at se forskel på "as" og "in".
Avatar billede olebole Juniormester
04. august 2007 - 14:20 #12
$name[] = $person->getElementsByTagName('name')->item(0)->nodeValue;

- kan du ikke. Du kan:
    $name[] = $person->getElementsByTagName('name');

- og så må du arbejde videre. Du kan i PHP ikke bruge 'pilen' som en 'dot' i JavaScript's dot-notation på én lang linje  =)
Avatar billede olebole Juniormester
04. august 2007 - 14:22 #13
Prøv:
    $temp = $person->getElementsByTagName('name');
    $temp = $temp->item(0);
    $name[] = $temp->nodeValue;
Avatar billede cbdavl Nybegynder
04. august 2007 - 14:24 #14
Jeg er ikke sikker på om jeg forstår dig ret. Men du vil have jeg laver noget a la:

$names = $person->getElementsByTagName('name');
$name[] = $names->item(0)->nodeValue;
Avatar billede olebole Juniormester
04. august 2007 - 14:25 #15
Hvis jeg var dig, ville jeg helt klart bruge JSON sammen med AJAX:
    http://www.eksperten.dk/artikler/1053
    http://www.json.org/
    http://dk.php.net/manual/da/ref.json.php

Det fylder mindre end XML og er betydelig lettere at arbejde med ... ikke mindst sammen med JavaScript på klienten  =)
Avatar billede cbdavl Nybegynder
04. august 2007 - 14:25 #16
Argh, igen er jeg inde og skrive svar mens du poster, så jeg ikke når at se dit svar før jeg til poster:P
Avatar billede olebole Juniormester
04. august 2007 - 14:26 #17
Jeg ved det godt. Har været på Eksperten i 8 år, så der sker ikke meget nyt  ;o)
Avatar billede erikjacobsen Ekspert
04. august 2007 - 14:28 #18
http://n0p.com/790205.php?str=elisabeth
har jeg dette:
<?php
    header('Content-Type: text/xml');
    header("Cache-Control: no-cache, must-revalidate");
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

    if(!isset($_GET["str"])) {
        $str = '';
    } else {
        $str = $_GET["str"];
    }

    $name = array();
    $age  = array();

    $dom = new DOMDocument();
    $dom->load("790205.xml");
   
    $root = $dom->getElementsByTagName('person');


$items = $dom->getElementsByTagName('person');
for ($i = 0; $i < $items->length; $i++) {
    $item=$items->item($i);
    $name1=$item->getElementsByTagName('name');
    $name1=$name1->item(0);
    $name1=$name1->nodeValue;
    $age1=$item->getElementsByTagName('name');
    $age1=$age1->item(0);
    $age1=$age1->nodeValue;
    $name[] = $name1;
    $age[]  = $age1;
}
   
    for($i=0;$i<count($name);$i++) {
        if(strtolower($name[$i]) == strtolower($str)) {
            echo '<?xml version="1.0" encoding="iso-8859-1" ?>';
            echo '<persons>';

            echo '<name>'.$name[$i].'</name>';
            echo '<age>'.$age[$i].'</age>';

            echo '</persons>';
        }
    }
?>

Ganske som Ole siger.
Avatar billede erikjacobsen Ekspert
04. august 2007 - 14:29 #19
Og du kan sikkert også bruge foreach.
Avatar billede erikjacobsen Ekspert
04. august 2007 - 14:30 #20
Og så kan man nok nemmere ramme en bestemt node med http://phpbuilder.com/manual/en/function.dom-domxpath-query.php
Avatar billede erikjacobsen Ekspert
04. august 2007 - 14:31 #21
Skulle egentlig have været det officielle link ;)  http://php.net/dom-domxpath-query.php
Avatar billede erikjacobsen Ekspert
04. august 2007 - 14:32 #22
Det går ret godt i dag: http://php.net/dom-domxpath-query  (nu holder jeg en pause)
Avatar billede cbdavl Nybegynder
04. august 2007 - 14:39 #23
Yeah, lige nu får jeg denne fejl:

XML tolkningsfejl: syntaksfejl adresse: http://hogalley.dk/cout/time.php?str=Sarah linje 2, kolonne 1:Fatal error: Call to undefined function:  load() in /hsphere/local/home/dhare/hogalley.dk/cout/time.php on line 16

Og det er efter at paste dit eksempel, Erik
Avatar billede cbdavl Nybegynder
04. august 2007 - 14:47 #24
Jeg har lige kigget på de link du, Olebole, har posted og er det virkelig så meget bedre end XML? XML er jo en meget udbredt format og jeg ville da tro at hvis man bare tog nogen forholdsregler når man udarbejde sit javascript til at modtage og arbejde med xml, ville det være lige så godt som crossbrowser-json?
Avatar billede olebole Juniormester
04. august 2007 - 14:59 #25
Da det var mig, der postede kommentaren, behøver jeg vel dårlig at svare  =)

1) Ja, det er efter min og mange andres mening langt bedre.
2) JSON er efterhånden _meget_ udbredt - og udbredelsen er i dramatisk vækst. GMail og GoogleMaps er således bygget op omkring JSON.
3) Crossbrowser-JSON eksisterer ikke ... JSON _er_ crossbrowser og kan ikke være andet.
Avatar billede cbdavl Nybegynder
04. august 2007 - 15:08 #26
Well, jeg kan godt se fordelene, ja. Og til Crossbrowser-JSON > det jeg mente var "JSON som er Crossbrowser i modsætning til XML"
Avatar billede erikjacobsen Ekspert
04. august 2007 - 15:09 #27
Det er jo kun hvis du har de rigtige DOM-funktioner i din PHP, at det vil virke. Hvad står der om det i en phpinfo();

Og ja, JSON vil nok være bedre i mange situationer. Jeg bruger selv JSON til noget AJAX, og XML til noget andet. Du' ved: en hammer til et som, og en skruetrækker til en skrue, selv om man sagtens kan gøre det omvendt...
Avatar billede cbdavl Nybegynder
04. august 2007 - 15:26 #28
Der er absolut intet om JSON i min php dokumentation, desværre...
Avatar billede olebole Juniormester
04. august 2007 - 15:28 #29
Erik >> Præcis - og det er faktisk en slankere måde at serialisere et objekt/array på end PHP's egen serialize - så JSON kan også vældig fint, når noget sådan skal lægges i en cookie eller DB  ;o)

cbdavl >> Det er fordi, du bør bruge den på nettet  ;o)
    http://dk.php.net/manual/da/ref.json.php
Avatar billede cbdavl Nybegynder
04. august 2007 - 15:31 #30
Jeg må erkende, Olebole, jeg ikke helt forstår hvad du mener med "bruge den på nettet"?
Avatar billede olebole Juniormester
04. august 2007 - 15:34 #31
PHP-referencen på nettet. Det er den officielle PHP-reference:
      http://dk.php.net
Avatar billede cbdavl Nybegynder
04. august 2007 - 15:39 #32
Yeah, men jeg tænkte mere på det som Erik sagde med min phpinfo() og der kunne jeg intet finde om JSON, så om det er muligt for mig at bruge?
Avatar billede olebole Juniormester
04. august 2007 - 15:40 #33
Den er fantastisk søgevenlig og der er masser af udviklernoter/-idéer ved hver funktion. Kender du ikke den, så er det bare med at komme igang. Den er intet mindre end uundværlig  ;o)

Disse funktioner saksede jeg iøvrigt fra Mozilla's site på et tidspunkt. De er proposals til en kommende JavaScript-version:

/*
    json.js
    2006-10-29

    This file adds these methods to java script:

        array.toJSONString()
        boolean.toJSONString()
        date.toJSONString()
        number.toJSONString()
        object.toJSONString()
        string.toJSONString()
            These method produces a JSON text from a JavaScript value.
            It must not contain any cyclical references. Illegal values
            will be excluded.

            The default conversion for dates is to an ISO string. You can
            add a toJSONString method to any date object to get a different
            representation.

        string.parseJSON()
            This method parses a JSON text to produce an object or
            array. It can throw a SyntaxError exception.

    It is expected that these methods will formally become part of the
    JavaScript Programming Language in the Fourth Edition of the
    ECMAScript standard in 2007.
*/

Array.prototype.toJSONString = function () {
    var a = ['['], b, i, l = this.length, v;
    for (i = 0; i < l; i += 1) {
        v = this[i];
        switch (typeof v) {
        case 'undefined':
        case 'function':
        case 'unknown':
            break;
        default:
            if (b) {
                a.push(',');
            }
            a.push(v === null ? "null" : v.toJSONString());
            b = true;
        }
    }
    a.push(']');
    return a.join('');
};

Boolean.prototype.toJSONString = function () {
    return String(this);
};

Date.prototype.toJSONString = function () {

    function f(n) {
        return n < 10 ? '0' + n : n;
    }

    return '"' + this.getFullYear() + '-' +
            f(this.getMonth() + 1) + '-' +
            f(this.getDate()) + 'T' +
            f(this.getHours()) + ':' +
            f(this.getMinutes()) + ':' +
            f(this.getSeconds()) + '"';
};

Number.prototype.toJSONString = function () {
    return isFinite(this) ? String(this) : "null";
};

Object.prototype.toJSONString = function () {
    var a = ['{'], b, i, v;
    for (i in this) {
        if (this.hasOwnProperty(i)) {
            v = this[i];
            switch (typeof v) {
            case 'undefined':
            case 'function':
            case 'unknown':
                break;
            default:
                if (b) {
                    a.push(',');
                }
                a.push(i.toJSONString(), ':',
                        v === null ? "null" : v.toJSONString());
                b = true;
            }
        }
    }
    a.push('}');
    return a.join('');
};

String.prototype.parseJSON = function () {
    try {
        if (/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/.test(this)) {
            return eval('(' + this + ')');
        }
    } catch (e) {
    }
    throw new SyntaxError("parseJSON");
};

(function () {
    var m = {
        '\b': '\\b',
        '\t': '\\t',
        '\n': '\\n',
        '\f': '\\f',
        '\r': '\\r',
        '"' : '\\"',
        '\\': '\\\\'
    };

    String.prototype.toJSONString = function () {
        if (/["\\\x00-\x1f]/.test(this)) {
            return '"' + this.replace(/([\x00-\x1f\\"])/g, function(a, b) {
                var c = m[b];
                if (c) {
                    return c;
                }
                c = b.charCodeAt();
                return '\\u00' +
                    Math.floor(c / 16).toString(16) +
                    (c % 16).toString(16);
            }) + '"';
        }
        return '"' + this + '"';
    };

})();

Med dem kan du serialisere f.eks. et JS-objekt som en JSON-streng:
    var o = {et:"en værdi", to:"en anden værdi", tre:["en", "to", "tre"]};
    alert(o.toJSONString());

- og du kan bruge parseJSON-metoden til at parse en JSON-streng, så du får et JS-objekt i stedet
Avatar billede olebole Juniormester
04. august 2007 - 15:41 #34
Okay ... så forstår jeg. Så kan du bruge Zend's JSON-værktøj ... et øjeblik, så skal jeg finde en URL til dig  =)
Avatar billede olebole Juniormester
04. august 2007 - 15:42 #35
Du bruger PHP5 ... ja ...?  =)
Avatar billede cbdavl Nybegynder
04. august 2007 - 15:44 #36
Jep, 5.2.3 får jeg afvide
Avatar billede olebole Juniormester
04. august 2007 - 15:49 #37
Download Zend-pakken fra:
    http://framework.zend.com/

Her i pakken (den, jeg har i hvertfald) ligger filen, der skal inkluderes:
    ZendFramework-0.8.0/library/Zend/Json.php

- men du må ikke fjerne filen fra pakken og uploade den. Hele pakken skal uploades.

Så kikker du på windscape's eksempel:
    http://www.eksperten.dk/artikler/1053

- under overskriften 'At producere JSON' - men retter require-stien til, så den passer til dit eksempel. Prøv det  =)
Avatar billede olebole Juniormester
04. august 2007 - 15:50 #38
- bare du uploader library-mappen, burde det være nok  ;o)
Avatar billede cbdavl Nybegynder
04. august 2007 - 15:53 #39
Yeah, det var også det jeg tænkte, men når jeg smutter ind for at se php filen, får jeg bare download-dialog vinduet lige i hovedet?!
Avatar billede cbdavl Nybegynder
04. august 2007 - 15:55 #40
Men jeg må give dig ret i, at det ser meget hurtigere ud end hvis man brugte xml.
Avatar billede olebole Juniormester
04. august 2007 - 16:13 #41
"når jeg smutter ind for at se php filen, får jeg bare download-dialog vinduet lige i hovedet?!"

- det forstår jeg ikke helt  =)
Avatar billede cbdavl Nybegynder
04. august 2007 - 16:19 #42
Well, den spørg om jeg vil downloade php filen, filen vises ikke, men kommer op i en download-dialog hvor den spørg om jeg vil gemme den/åbne den eller anullere ... og det er efter jeg tilførte filerne fra den der library-mappe over i en mappe der hedder "json" og jeg "require_once('json/json.php');" i toppen af php filen.
Avatar billede olebole Juniormester
04. august 2007 - 16:29 #43
Så må du have lavet noget helt galt. Prøv at lægge et link
Avatar billede cbdavl Nybegynder
04. august 2007 - 16:34 #44
Det kan jeg desværre ikke, da jeg ikke har php 5+ på nogen af mine online servere, kun på min computer som kun mig selv har tilgang til.

Men jeg har lige prøvet igen... Det eneste jeg har gjort er at paste php-koden fra artiklen (http://www.eksperten.dk/artikler/1053) og så tager alle mapper og filer og smide en mappen "json" som ligger i samme mappe som phpfilen gør.
Avatar billede olebole Juniormester
04. august 2007 - 16:35 #45
Så _kan_ det ikke ske! Du må gøre noget andet  =)
Avatar billede cbdavl Nybegynder
04. august 2007 - 16:37 #46
Nope, det er desværre det eneste jeg har gjort. Jeg har som sagt lige gjort det igen:/
Avatar billede cbdavl Nybegynder
04. august 2007 - 16:41 #47
Men, det ser ud til at min server ikke forstå hvad den skal gøre med sider af typen text/json - er der noget man kan gøre der?
Avatar billede olebole Juniormester
04. august 2007 - 16:43 #48
Hehe ... næhhh, det er din browser, der ikke forstår det. Du kan ikke kalde et JSON-dokument direkte i en browser, når det sendes med den korrekte MIME-type  ;o)
Avatar billede cbdavl Nybegynder
04. august 2007 - 16:44 #49
Så, det virker som det skal og AJAX burde kunne forstå det, eller?
Avatar billede olebole Juniormester
04. august 2007 - 16:52 #50
Yups ... no worries  ;o)
Avatar billede cbdavl Nybegynder
04. august 2007 - 16:54 #51
Sørme så... Den hentede det helt perfekt, yeah:D Men noget der bekymre mig lidt er, at det umuligt kan være smart hvis alle og enhver bare kan gå ind på phpdokumentet(af typen text/json) og så bare downloade den?
Avatar billede olebole Juniormester
04. august 2007 - 16:57 #52
Har du prøvet? Ellers prøv og så se, hvad det faktisk er, der kan downloades. Mon ikke det bare er et dokument med JSON-strengen?  ;o)
Avatar billede olebole Juniormester
04. august 2007 - 16:58 #53
- det betyder jo i hvertfald ingen ting ... det svarer til at kunne downloade data i XML-format (hvis det var et XML-dokument)
Avatar billede olebole Juniormester
04. august 2007 - 16:59 #54
Man kan ikke få fat i din PHP-kode eller MySQL-info, hvis det er, hvad du er bange for  =)
Avatar billede cbdavl Nybegynder
04. august 2007 - 17:00 #55
Argh, så er det jo ikke noget problem. Eller er det? Hvad sker der hvis man skal transportere ting som passwords og sådan, fra en database. Så kan folk jo også få fat i dem, ved bare at gætte sig frem til filens navn?
Avatar billede cbdavl Nybegynder
04. august 2007 - 17:03 #56
Og når man snakker om at lagre information (database(hvis ja, hvilke?), xml og sådan) Hvilken vej (hvis ikke alle vejene er lig hinanden) skal man så gå? Hvilke har flest fordele og sådan?
Avatar billede olebole Juniormester
04. august 2007 - 17:03 #57
Det må du endelig ikke sende ukrypteret ... hverken i XML eller JSON. Det vil altid være lige til at hugge  =)

Data, sendt som XML eller JSON, er ganske offentlige
Avatar billede olebole Juniormester
04. august 2007 - 17:04 #58
Du kan - hvis du f.eks. bruger en alm. MySQL-DB - gemme JSON i et felt på samme måde, som du kan med XML
Avatar billede cbdavl Nybegynder
04. august 2007 - 17:06 #59
Og så har jeg lige opdaget at JSON ikke er så venlig mod æ, ø og å. Hvordan klarer man den? Bare noget replacement med ae>æ,oe>ø&aa>å eller er der en mere praktisk fremgangsmåde?
Avatar billede cbdavl Nybegynder
04. august 2007 - 17:08 #60
Sende _al_ (jeg lære noget:P) information krypteret, eller kun ting som fremmede ikke må få fingrene i?
Avatar billede olebole Juniormester
04. august 2007 - 17:09 #61
Du skal altid sørge for, at hele kæden kører med samme charset. Det gælder DB, server og dokumenter (din Content-type meta i head-elementet). Endvidere skal du sørge for at gemme filen i det rigtige format ... utf-8, hvis du bruger utf-8 og ANSII, hvis du bruger iso-8859-1
Avatar billede olebole Juniormester
04. august 2007 - 17:10 #62
Du skal kun sende følsomme oplysninger i krypteret form
Avatar billede cbdavl Nybegynder
04. august 2007 - 17:11 #63
Pardon me all of my off-topic questions, but i'm kinda kiddylike in this matter.
Avatar billede olebole Juniormester
04. august 2007 - 17:11 #64
Jeg er på vej ud af døren, så der er nok nogle timer, jeg ikke kan hjælpe - men jeg vender frygteligt tilbage senere  ;o)
Avatar billede olebole Juniormester
04. august 2007 - 17:12 #65
- og du skal ikke undskylde ... jeg hjælper hellere end gerne. Kun det spørgsmål, der ikke bliver stillet, er et dumt spørgsmål  ;o)
Avatar billede cbdavl Nybegynder
04. august 2007 - 17:15 #66
Godt så, så må du hygge dig;)
Avatar billede erikjacobsen Ekspert
04. august 2007 - 17:36 #67
Hvordan ser dit forkerte output ud mht æøå ? Måske kan vi gætte hvor tegnsættene går galt. (Jeg er måske lidt, mens Ole er ude med rollatoren)
Avatar billede cbdavl Nybegynder
04. august 2007 - 18:23 #68
Jeg prøver at få udskrevet Jørgensen, men jeg får kun J
Avatar billede erikjacobsen Ekspert
04. august 2007 - 18:37 #69
Og det du'r vel ikke at forbyde folk at hedde Jørgensen. Hmm. Lad os debugge - hvad står der i JSON-strengen - prøv i en browser (eller læg et link).
Avatar billede cbdavl Nybegynder
04. august 2007 - 18:52 #70
Det er faktisk bare det mesteren her (http://www.eksperten.dk/artikler/1053) instroducere jeg har kopieret ind. Andet er det såmænd ikke. Men det går ikke at jeg går videre, hvis jeg ikke engang kan arbejde med hele det danske alfabet:P
Avatar billede erikjacobsen Ekspert
04. august 2007 - 19:38 #71
Jo, men et eller andet sted er der sikkert vrøvl med tegnsæt. Det er bare det vi skal finde ud af.
Avatar billede cbdavl Nybegynder
04. august 2007 - 20:02 #72
Yeah, og det jeg gjorde dig bare opmærksom på det, så jeg var fri for at sige hvad der står i JSON strengen eller give dig et link. Men det må jo være noget med der skal sættes noget tegnsætning i php->json filen, for jeg har i min html fil.
Avatar billede erikjacobsen Ekspert
04. august 2007 - 20:13 #73
Det er dig der bestemmer hvornår problemet kan løses - helt i orden med mig.
Avatar billede cbdavl Nybegynder
04. august 2007 - 20:18 #74
Jamen, kan du forklare mig hvorfor du skal se mine dokumenter når du kan se det præcist samme hvis du kigger i artiklen?
Avatar billede erikjacobsen Ekspert
04. august 2007 - 20:20 #75
Det er fordi jeg ikke kan se i artiklerne hvilke tegnsæt du kører med.
Avatar billede cbdavl Nybegynder
04. august 2007 - 20:25 #76
Jeg er lidt i tvivl med JSON filen, men min HTML er iso-8859-1 ... Problemet er det Notepad++ ikke giver mig mulighed for at vælge om det skal være anci osv. når jeg gemmer filen, men JSON filen og HTML filen er gemt på samme måde, så mon ikke de er ens?
Avatar billede erikjacobsen Ekspert
04. august 2007 - 20:40 #77
Jo, i vores del af verden er det nok iso-8859-1. Modulet fra zend forventer måske utf8?
Avatar billede cbdavl Nybegynder
04. august 2007 - 20:50 #78
Ved du tilfældigvis hvordan man så ændre det?:)
Avatar billede olebole Juniormester
04. august 2007 - 21:00 #79
Jeg tror, Zend-tingene kører utf-8, hvilket nok er det, der bliver mere og mere fremherskende (også i sprogenes streng-funktioner, m.m).

Prøv at skrive denne meta i dit HTML-dokument:
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

- og sørg for, det er gemt som utf-8. Hvis du ikke ved, hvordan, så åben det i Notesblok og vælg 'Gem som...' - og vælg dér den rette kodning for neden.

Hvad sker der så?
Avatar billede cbdavl Nybegynder
04. august 2007 - 21:05 #80
Nu er begge dokumenter UTF-8, men nu udskrives der overhovedet intet:/
Avatar billede erikjacobsen Ekspert
04. august 2007 - 21:06 #81
Rent gætteri, når vi ikke kan se hvad der sker. Kan vi ikke se JSON-koden på en eller anden måde??

God tur til bingo, Ole?
Avatar billede olebole Juniormester
04. august 2007 - 21:13 #82
Jeg må også opgive, når jeg ikke kan få adgang til at se, hvad der sker
Avatar billede cbdavl Nybegynder
04. august 2007 - 21:20 #83
Erik, kig i ovenstående artikel, der er JSON koden:P

Jeg ville ønske, Ole, jeg kunne vise jer det. Det er ikke pænt at modstride folk der prøver at hjælp. Men jeg har desværre ingen online server der har php5+.
Avatar billede erikjacobsen Ekspert
04. august 2007 - 21:25 #84
Hvad siger så JSON-linket i din browser? Vis kilde, Ctrl-A, Ctrl-C, Ctrl-V
Avatar billede cbdavl Nybegynder
04. august 2007 - 21:26 #85
Altså selve JSON-filen?
Avatar billede olebole Juniormester
04. august 2007 - 21:29 #86
cbdavl >> download filen og kopier indholdet herind

Erik >> Han kan ikke se filen i browseren, da Zend sender den som 'text/json' - for at undgå evt. exploits  ;o)
Avatar billede olebole Juniormester
04. august 2007 - 21:31 #87
Vedr. 'text/json' for interesserede:
    http://jibbering.com/blog/?p=514
Avatar billede cbdavl Nybegynder
04. august 2007 - 21:35 #88
{"user":{"firstName":"Claus","lastName":"J","nick":"Windcape","age":20}}

Hvad jeg får af output
Avatar billede erikjacobsen Ekspert
04. august 2007 - 21:45 #89
Du bruger 15:40:38 ??  Ja, den har da vist aldrig hørt om andet end 7 bits tegn.
Avatar billede cbdavl Nybegynder
04. august 2007 - 21:48 #90
Nu er jeg ikke helt med ... 14:40:38?
Avatar billede olebole Juniormester
04. august 2007 - 21:52 #91
Erik >> Det er output'et fra Zend ... ikke de JS-udvidelser, jeg skrev i 15:40:38  :)

cbdavl >> Det, der står dér ... giver det problemer?
Avatar billede erikjacobsen Ekspert
04. august 2007 - 21:54 #92
Jeg spørger bare om du bruger koden fra: "Kommentar: olebole 04/08-2007 15:40:38"
Avatar billede olebole Juniormester
04. august 2007 - 21:56 #93
cbdavl >> I din callback-funktion skal du prøve at skrive:

var oResp = null;
eval("oResp = " + xmlHttp.responseText);
alert(oResp.user.firstName);

- og så kan du prøve de andre properties på user
Avatar billede cbdavl Nybegynder
04. august 2007 - 22:01 #94
Nåå, på den måde, Erik;)

Jeg kan ikke se hvilken forskel det skulle gøre Ole? Det laver jo bare en alert med "Claus" i...
Avatar billede olebole Juniormester
04. august 2007 - 22:06 #95
Jamen, hvad er da dit ptoblem?
Avatar billede erikjacobsen Ekspert
04. august 2007 - 22:11 #96
Der ku' være en fidus i at prøve lastName i stedet for firstName. Tror du Zend har hørt om andet end 7-bits tegn, Ole? ;) Jeg føler mig sat 15-20 år tilbage i tiden - dengang de rabiate programmører på Island brokkede sig højlydt, når deres sjove tegn ikke kunne bruges.
Avatar billede cbdavl Nybegynder
04. august 2007 - 22:15 #97
Jeg havde skam fundet den lille tastefejl (regnede jeg ihvertfald med) og prøvet med lastName også, hvilket stadigvæk kun gav "J"...
Avatar billede olebole Juniormester
04. august 2007 - 22:16 #98
- okay ... den skulle lige sies! Jeg troede at 'J' var alt der ... årrhhhh ... glem det!  :D

Hvor kommer data fra?
Avatar billede olebole Juniormester
04. august 2007 - 22:16 #99
Hvordan ser dit dokument, der skriver JSON-strengen ud?
Avatar billede cbdavl Nybegynder
04. august 2007 - 22:16 #100
Mit problem, Ole, er at Joergens bliver udskrevet som Joergensen, men Jørgensen som J. Hvilket ikke er særligt hensigtsmæssigt, hvis dette lille script var noget der faktisk skulle bruges til noget:)
Avatar billede olebole Juniormester
04. august 2007 - 22:17 #101
I know ... hvordan ser dokumentet ud?
Avatar billede cbdavl Nybegynder
04. august 2007 - 22:18 #102
det er bare koden fra artiklen (http://www.eksperten.dk/artikler/1053) jeg har pasted ind og så øndret Joergensen til Jørgensen, hvor den lille bug så dukkede op.
Avatar billede erikjacobsen Ekspert
04. august 2007 - 22:22 #103
Det siges om Zend JSON:  "Does not convert string data: it is up to the user to take care about conversion to the desired charset"  Kilde (kender ikke troværdigheden, eller hvor opdateret den er): http://gggeek.altervista.org/sw/article_20061113.html
Avatar billede olebole Juniormester
04. august 2007 - 22:25 #104
Du skal muligvis bruge utf_encode:
    http://dk.php.net/manual/en/function.utf8-encode.php

At beslutte sig for - og fastlægge sig på - et tegnsæt er ikke helt let nu om stunder ... men det er fedt, når man har gjort det. Det er bare noget rod, når man ikke kan se, hvad der sker - og personen i den anden ende ikke er særlig erfaren (no offence!)  =)
Avatar billede cbdavl Nybegynder
04. august 2007 - 22:39 #105
Well, jeg er ikke særlig erfaren med php og DOM, det må jeg blankt erkende. Men hej, jeg er allerede blevet en lille smule bare erfaren på det her område, ved hjælp af jer:D
Det virker ihvertfald nu:)

Jeg vil lige se om jeg igen kan komme af sted off-topic spørgsmål, som kommer af jeg leger med det projekt denne tråd er om.

Hvorfor kan jeg ikke sige (xmlHttp indeholde min XHR) if(xmlHttp.readyState < 4) {} og så derinde sætte en "Loading" effekt frem og så bagefter når readystate er lig 4, fjerne det igen? Det virker ikke helt efter hensigten; jeg får 4 loading effekter. Jeg har også prøvet med readystate lig 0, men der får jeg overhovedet ingen. Hvor skal jeg kalde loading effekten henne?
Avatar billede olebole Juniormester
04. august 2007 - 22:52 #106
<div id="myLoader" style="display:none">Loading...</div>

Når du kører xmlHttp.send, viser du den:
    document.getElementById("myLoader").style.display = "block";

Når du modtager data, gemmer du den:
    if(xmlHttp.readyState == 4) {
        document.getElementById("myLoader").style.display = "none";
    }
Avatar billede olebole Juniormester
04. august 2007 - 22:54 #107
- hvis du bruger GMail, kender du netop dén label  ;o)
Avatar billede cbdavl Nybegynder
04. august 2007 - 22:58 #108
Yeah... Meget grim, gmails loader er, men utrolig nyttig:)
Avatar billede cbdavl Nybegynder
04. august 2007 - 23:00 #109
Jeg tænkte på om i 2 gutter kender nogen gode DOM (eller AJAX, så jeg er godt dækket ind) reference sider, så jeg er fri for at sidde og google tonsvis af ord før jeg finder netop den funktion (i dette tilfælde removeChild - og kun 2 ord) jeg leder efter?
Avatar billede olebole Juniormester
04. august 2007 - 23:10 #110
Denne er udmærket:
    http://msdn2.microsoft.com/en-us/library/ms533053.aspx

Bemærk dog dette ... VIGTIGT!:

Gå ind på:
    http://msdn2.microsoft.com/en-us/library/ms536702.aspx

- og scroll ned til 'Standards Information'.

Gå derefter til:
    http://msdn2.microsoft.com/en-us/library/ms536708.aspx

- og scoll ned igen. Her står:
    "There is no public standard that applies to this method"

- hvorfor den ikke bør bruges
Avatar billede olebole Juniormester
04. august 2007 - 23:13 #111
- og her er specifikationerne for script/DOM bindingerne:
    http://www.w3.org/TR/DOM-Level-2-Core/ecma-script-binding.html
Avatar billede cbdavl Nybegynder
04. august 2007 - 23:15 #112
Ja det kan jeg godt se. Standarder frem for alt:) Men hvorfor overhovedet bruge removeNode() ?
Avatar billede olebole Juniormester
04. august 2007 - 23:19 #113
Hvis du har fyldt data i et div ... f.eks. bestående af linjer - igen bestående af div med noget tekst i. Det kunne være data om en bruger ... navn, adresse, telefon, køn eller ej, fodsvamp, osv.

Så kalder brugeren serveren og vil gerne have fyldt nye data i display'et. Så renser vi det ydre div med:

while (ELEMENT.firstChild) {
    ELEMENT.removeChild( ELEMENT.firstChild );
}

- så vi kan fylde nye elementer i
Avatar billede olebole Juniormester
04. august 2007 - 23:22 #114
- måske var eksemplet ikke så velvalgt. I lige netop dét tilfælde ville jeg foretrække at skrive nyt indhold i de allerede bestående div.

I en situation, hvor man ønsker at skrive en liste el. lign, kan man rense evt. bestående elementer op på den viste måde  ;o)
Avatar billede cbdavl Nybegynder
04. august 2007 - 23:23 #115
Du må lære bære over med mig, jeg taler kun som jeg har forstand og jeg aner intet om DOM...

Jamen, det var removeNode der ikke var en standard, removeChild som du bruger i dit eksempel er standard.. Hvad er så problemet?:P
Avatar billede cbdavl Nybegynder
04. august 2007 - 23:24 #116
og også på min mangel på kontur læsning på mine poster, før jeg poster dem:D "lære" skulle være "lige":P
Avatar billede olebole Juniormester
04. august 2007 - 23:37 #117
Du har helt ret ... removeNode bør man ikke bruge. Vi misforstår vist bare hinanden  ;o)
En anden god metode at kende er cloneNode. Bliver den kaldt med true som argument, returnerer den en klon af elementet med alle dets child-elementer.
Prøv f.eks. denne kode, hvor jeg opretter en skabelon på onload - og derefter bruger den, når jeg skal indsætte rækker:

<script type="text/JavaScript">
var oRow = {fornavn:"Ole", efternavn:"Clausen", alder:52, fodsvamp:"ikke for tiden"};

function insertRow(oRow) {
    var o = oTempl.cloneNode(true);
    var aTD = o.getElementsByTagName("td");
    aTD[0].firstChild.nodeValue = oRow.fornavn;
    aTD[1].firstChild.nodeValue = oRow.efternavn;
    aTD[2].firstChild.nodeValue = oRow.alder;
    aTD[3].firstChild.nodeValue = oRow.fodsvamp;
    oBody.appendChild(o);
}

var oBody = oTempl = null;
window.onload = function() {
    oBody = document.getElementById("myBody");
    var o = oBody.getElementsByTagName("tr")[0];
    oTempl = o.cloneNode(true);
    oBody.removeChild(o);
    o = null;
}
</script>

<button onclick="insertRow(oRow)">Test</button>

<table>
<thead>
<tr>
    <th>Fornavn</th>
    <th>Efternavn</th>
    <th>Alder</th>
    <th>Fodsvamp</th>
</tr>
</thead>
<tbody id="myBody">
<tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
</tr>
</tbody>
</table>
Avatar billede olebole Juniormester
04. august 2007 - 23:46 #118
I øvrigt har jeg selv disse liggende fast i min standard HTML-template:

var d=document;
function gE(id){return d.getElementById(id)};
function gA(o,t){return o.getElementsByTagName(t)};
function cE(t){return d.createElement(t)};

o = gE("mitDiv");    =>    o = document.getElementById("mitDiv");

a = gA(ELEMENT, "div")    =>    a = ELEMENT.getElementsByTagName("div");

o = cE("div")    =>    o = document.createElement("div");

- så slider den aldrende programmør ikke så meget på sine små, rynkede pizzatænger, når han DOM'er
Avatar billede cbdavl Nybegynder
04. august 2007 - 23:48 #119
Det er da egentligt ret smart. Men nok mere når man skal tilføje ekstra elementer, ikke for at fjerne et element for at tilføje et nyt ligenende:P
Avatar billede cbdavl Nybegynder
04. august 2007 - 23:51 #120
Well det kan man vel også, hvis man er ved at runde de 60, Ole;) Jeg har også altid brugt dynamiske funktioner så jeg var fri for at skrive ting der tit skal bruges, igen og igen:)
Avatar billede olebole Juniormester
04. august 2007 - 23:52 #121
Ja, hvis du f.eks. loader mange brugere i en tabel på baggrund af et databasetræk ... det var bare et eksempel med det ene brugerobjekt. Der ville typisk være tale om et array af objekter  ;o)
Avatar billede olebole Juniormester
04. august 2007 - 23:54 #122
- roooooolig nu! Det er kun mit spejlbillede, der er ved at runde de 60 *LoL*

- og lige netop nu er anledningen til at få indskrevet den længe ønskede i skabelonen:
    function cT(s){return d.createTextNode(s)};
Avatar billede cbdavl Nybegynder
04. august 2007 - 23:57 #123
Hvis du lyster det:)

Kender du nogen servere hvor man kan få noget gratis lager plads, med php5+?
Avatar billede olebole Juniormester
04. august 2007 - 23:59 #124
Nej, desværre ... jeg betaler mig fra det  =)
Avatar billede cbdavl Nybegynder
04. august 2007 - 23:59 #125
...jeg har nemlig lavet en lille tab-funktion, men den lagger lidt. Altså nogen gange hvis man trykker på en ny tab lige efter man har trykket på en, kommer der ingen "loader" frem, men istedet ser man bare den side man lige har skiftet til, indtil den nye side er loaded. Og så kunne det jo være du lige kunne kigge på det, for at hjælpe en lille baby på vejen til at vokse sig stor DOM-scripter:P
Avatar billede cbdavl Nybegynder
05. august 2007 - 00:00 #126
Ærgeligt ... Jeg har www.hogalley.dk hos surftown men det er noget ustabilt hvis der er meget traffik og så er der kun php 4. Så jeg tror jeg skal have købt mig noget nyt:)
Avatar billede olebole Juniormester
05. august 2007 - 00:59 #127
Okay ... det sker, fordi den første side fjerner loader-divet  ;o)

Du kan sætte en global variabel til 0:
    <script type="text/JavaScript">
        var nHttpInst = 0;
      ... osv - osv ...

Den bruger du til at se, om der er åbne forbindelser til serveren.

Når du sender en forespørgsel, skriver du:
    xmlHttp.send();
    document.getElementById("myLoader").style.display = "block";
    nHttpInst++; // Vi tæller den én op

Når du modtager data skriver du:
    if(xmlHttp.readyState == 4) {
        nHttpInst--; // Vi tæller den én ned
        if (nHttpInst<1) document.getElementById("myLoader").style.display = "none";
    }
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester