Avatar billede Mr-Petersen Nybegynder
03. marts 2011 - 15:27 Der er 17 kommentarer og
1 løsning

Javascipt fejl kan ikke selv finde den.

Hej jeg har fundet det her script, som jeg så har ændret lidt på, er der nogen der kan se hvorfor det ikke virker, jeg er ikke den bedste til Javascript. men ved at den php fil den peger på virker. den er afprøvet uden scriptet.

<script language="javascript" type="text/javascript">
<!--

function ajaxFunction(){
    var ajaxRequest;     
    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                alert("Your browser broke!");
                return false;
            }
        }
    }

    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
            document.myForm.time.value = ajaxRequest.responseText;
        }
    }
    var phone = document.getElementById('phone').value;
    var id = document.getElementById('id').value;
    var tid = document.getElementById('tid').value;
    var queryString = "?phone=" + phone + "&id=" + id + "&tid=" + tid;
    ajaxRequest.open("GET", "ajax.php" + queryString, true);
    ajaxRequest.send(null);
}

//-->
</script>

<form name='myForm'>
<input type='text' id='phone' />
<input type='text' id='id' />
<input type='text' id='tid' />
<input type='button' onclick='ajaxFunction()' value='Send' />
</form>
Avatar billede olebole Juniormester
03. marts 2011 - 15:46 #1
<ole>

Hvad betyder det, at scriptet ikke virker? Får du fejl (JS eller PHP) - og i så fald: Hvad siger fejlen(e)?

Under alle omstændigheder bør du nok lægge lidt flere info:
Hvad sker der?
Hvad sker ikke?
Hvad forventede du skulle ske?
Hvad sker der på serveren? Bliver requesten modtaget og hvad står der i den?

/mvh
</bole>
Avatar billede olebole Juniormester
03. marts 2011 - 15:50 #2
Hvis den kode, du viser, er den, du tester med, så mangler du feltet 'time' - og så kan denne linje selvfølgelig ikke virke:
    document.myForm.time.value = ajaxRequest.responseText;

- men det ville jo udløse en fejl, og sådan en ville du vel fortælle om(?)
Avatar billede Mr-Petersen Nybegynder
03. marts 2011 - 17:55 #3
det kommer ikke med nogen fejl, eller havde du fået det også :D

men hvis der ikke skal så time hvad så :D
Avatar billede Mr-Petersen Nybegynder
03. marts 2011 - 18:36 #4
den skal lave det her

linker lige ajax.php
//db con
include '74333.php';
    // Retrieve data from Query String
$phone = $_GET['phone'];
$id = $_GET['id'];
$tid = $_GET['tid'];
    // Escape User Input to help prevent SQL Injection
$phone = mysql_real_escape_string($phone);
$id = mysql_real_escape_string($id);
$tid = mysql_real_escape_string($tid);
$ff="SELECT `businessname` FROM `firms` WHERE id='$id'";
$ffresult=mysql_query($ff);
$ffrow=mysql_fetch_array($ffresult);
$fffirm=$ffrow['businessname'];   
    //build query
$query="SELECT * FROM `$fffirm` WHERE tid='$tid' AND phone='$phone'";
    //Execute query
$result=mysql_query($query);
$rows=mysql_fetch_array($result);
echo $phone;
$display_string = "<table width=\"800\" border=\"0\" align=\"center\" cellpadding=\"2\" cellspacing=\"1\" bgcolor=\"#CCCCCC\">";
$display_string .= "<tr>";
$display_string .= "<td width=\"162\"><a href=\"index.php\">". $f_back ."</a></td>";
$display_string .= "<td width=\"328\"><strong>". $f_tid ." ". $rows['tid'] ."</strong></td>";
$display_string .= "<td width=\"227\"><strong>". $f_status ."</strong>";
    $status = $rows['status'];
    switch($status)
    {
    case "new":
    echo " " . '<font color="green">'. $status .'</font>';
    break;
    case "progress":
    echo " " . '<font color="orange">'. $status .'</font>';
    break;
    case "succes";
    echo " " . '<font color="red">'. $status .'</font>';
    break;
    }
$display_string .= "</td>";
$display_string .= "<td width=\"73\" bgcolor=\"#CCCCCC\">&nbsp;</td>";
$display_string .= "</tr>";
$display_string .= "<tr>";
$display_string .= "<td bgcolor=\"#E6E6E6\"><strong>". $f_name ."</strong> ". $rows['fname'] . " " . $rows['lname'] ."</td>";
$display_string .= "<td bgcolor=\"#FFFFFF\" colspan=\"2\"><strong>". $rows['title'] ."</strong></td>";
$display_string .= "<td>&nbsp;</td>";
$display_string .= "</tr>";
$display_string .= "<tr>";
$display_string .= "<td bgcolor=\"#E6E6E6\"><strong>". $f_address ."</strong> " . $rows['address'] ."</td>";
$display_string .= "<td colspan=\"2\" rowspan=\"5\" bgcolor=\"#FFFFFF\">". $rows['task'] . "</td>";
$display_string .= "<td>&nbsp;</td>";
$display_string .= "</tr>";
$display_string .= "<tr>";
$display_string .= "<td bgcolor=\"#E6E6E6\"><strong>". $f_post ."</strong> " . $rows['post'] ."</td>";
$display_string .= "<td >&nbsp;</td>";
$display_string .= "</tr>";
$display_string .= "<tr bgcolor=\"#E6E6E6\">";
$display_string .= "<td><strong>". $f_city ."</strong> " . $rows['city'] ."</td>";
$display_string .= "<td bgcolor=\"#CCCCCC\">&nbsp;</td>";
$display_string .= "  </tr>";
$display_string .= " <tr bgcolor=\"#E6E6E6\">";
$display_string .= "<td><strong>". $f_phone ."</strong> " . $rows['phone'] ."</td>";
$display_string .= "<td bgcolor=\"#CCCCCC\">&nbsp;</td>";
$display_string .= "</tr>";
$display_string .= " <tr bgcolor=\"#E6E6E6\">";
$display_string .= "<td><strong>". $f_email ."</strong> " . $rows['email'] ."</td>";
$display_string .= "  <td bgcolor=\"#CCCCCC\">&nbsp;</td>";
$display_string .= "</tr>";
$display_string .= " <tr>";
$display_string .= "  <td >&nbsp;</td>";
$display_string .= "  <td >&nbsp;</td>";
$display_string .= "    <td >&nbsp;</td>";
$display_string .= "<td >&nbsp;</td>";
$display_string .= "</tr>";
$display_string .= "<tr bgcolor=\"#E6E6E6\">";
$display_string .= "  <td><strong>Timeused:</strong></td>";
$display_string .= "  <td colspan=\"2\" bgcolor=\"#FFFFFF\">&nbsp;</td>";
$display_string .= "    <td bgcolor=\"#CCCCCC\">&nbsp;</td>";
$display_string .= "  </tr>";
$display_string .= " <tr bgcolor=\"#E6E6E6\">";
$display_string .= " <td valign=\"top\"><strong>". $f_comment ."</strong></td>";
$display_string .= "<td bgcolor=\"#FFFFFF\" colspan=\"2\">". $rows['comment'];
$display_string .= "</td>";
$display_string .= "<td bgcolor=\"#CCCCCC\">&nbsp;</td>";
$display_string .= "</tr>";
$display_string .= "<tr>";
$display_string .= "<td>&nbsp;</td>";
$display_string .= "<td>&nbsp;</td>";
$display_string .= "<td>&nbsp;</td>";
$display_string .= "<td><A HREF=\"java script:window.print()\">". $f_print ."</A></td>";
$display_string .= "  </tr>";
$display_string .= "</table>";
echo $display_string;
mysql_close();
?>
Avatar billede olebole Juniormester
03. marts 2011 - 21:46 #5
Denne linje:
    document.myForm.time.value = ajaxRequest.responseText;

- prøver at sætte værdien på et felt i formen - og feltet hedder 'time'. Da du ikke har det pågældende felt i formen, vil din scriptet udløse en fejl i din browser.

I IE kommer en lille gul trekant i nederste venstre hjørne (hvis den ikke er sat til altid at vise fejl - og det bør en udviklers IE altid være).

I Firefox og Opera skal du selv åbne fejlkonsollen for at finde fejlen. Den bør du altid have åben, når du tester kode i disse browsere.

Jeg forstår dog ikke, hvad du vil med alt det HTML i et formfelt(?)
Avatar billede Mr-Petersen Nybegynder
03. marts 2011 - 21:54 #6
vil ikke have det i et form felt, vil gerne have at formen bliver fjernet og tablen bliver vist. hvis det kan lade sig gøre
Avatar billede Mr-Petersen Nybegynder
04. marts 2011 - 08:19 #7
Jeg løste det ved at ændre linien til document.getElementById("a").innerHTML=ajaxRequest.responseText;
og så insættet
<div id="a"></div>
efter formen.

Men vil stadig gerne have at formen forsvinder kan du klar den?
Avatar billede olebole Juniormester
04. marts 2011 - 14:54 #8
Du kan indsætte og fylde et div og slette formen med:

    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
            var oDiv = document.createElement("div");
            var oForm = document.getElementById("myForm");
            oForm.parentNode.replaceChild(oDiv, oForm);
            oDiv.innerHTML = ajaxRequest.responseText;
        }
    }


- og så skal du give formen et id:

<form name='myForm' id='myForm'>
Avatar billede olebole Juniormester
04. marts 2011 - 15:00 #9
- men meningen med Ajax er jo netop at HTML formatere dine data på PC'en ... ikke på serveren. Ellers bliver din kode hamrende ineffektiv - og du spilder enorme mængder server ressourcer

I stedet bør du formatere dine data som JSON eller XML og lade brugerens PC formatere HTML'en med DOM.

Hvordan du gør det, bliver dog for lang en omgang til at forklare her - men du bør sætte dig grundigt ind i DOM og JSON eller XML, hvis du vil lege med Ajax  =)
Avatar billede Mr-Petersen Nybegynder
04. marts 2011 - 16:56 #10
Tak Ole det vil jeg gøre, men det du har lavet over fungere ikke

den laver en fejl: oForm is NULL

og hvad det betyder ved jeg ikke
Avatar billede Mr-Petersen Nybegynder
04. marts 2011 - 17:01 #11
Ole det virker perfect når jeg husker =


Mange tak for hjælpen hvis du smider et svar sender jeg point.
Avatar billede olebole Juniormester
04. marts 2011 - 17:11 #12
Selvtak. Jeg bruger ikke længere Eksperten (kom forbi ved et tilfælde og blandede mig i et par spørgsmål), så læg selv et svar og accepter det  ;o)
Avatar billede Mr-Petersen Nybegynder
04. marts 2011 - 17:19 #13
Jeg er lykkelig for at du kom forbi.
Avatar billede olebole Juniormester
04. marts 2011 - 17:34 #14
Jeg kom i øvrigt lige i tanker om en ting. Når du bruger Ajax, får du let cacheing problemer i IE, når du bruger GET. Hvis du f.eks. sender to forespørgsler, hvor query strengen her sender samme værdier:

      var queryString = "?phone=" + phone + "&id=" + id + "&tid=" + tid;


- så vil IE hente resultatet af forespørgsel nummer to fra brugerens cache ... uanset om indholdet af databasen i mellemtiden er ændret.

Det er ikke sikkert, det betyder noget i dette helt specifikke tilfælde, men det er en god idé altid bruge POST. Så kommer du aldrig i problemer, hvis det en dag pludselig betyder noget  ;o)

Løsningen er:

        ajaxRequest.open("post", "ajax.php" + queryString, true);


- og så slå alle variabler op i $_POST arrayet i stedet for i $_GET. Så tvinger du IE til at hente resultatet fra serveren hvergang - og ikke fra cachen
Avatar billede Mr-Petersen Nybegynder
04. marts 2011 - 19:51 #15
Tak det kan jeg jo lige så godt ændre med det samme. tror nu kun jeg har GET 2 steder men så er jeg sikker
Avatar billede olebole Juniormester
05. marts 2011 - 00:15 #16
Undskyld, jeg vrøvler! Du skal skrive:


    ajaxRequest.open("post", "ajax.php", true);
    ajaxRequest.send(queryString);

Avatar billede Mr-Petersen Nybegynder
06. marts 2011 - 12:59 #17
Det kunne jeg ikke få til at virke det, den fejler ikke men der kommer ikke noget i variablerne
Avatar billede olebole Juniormester
06. marts 2011 - 16:42 #18
Du bør nok sætte en request header:


    ajaxRequest.open("post", "ajax.php", true);
    ajaxRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8")
    ajaxRequest.send(queryString);

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