Gå til innhold

Problemer med Ajax og POST...


Anbefalte innlegg

Hei, jeg har et merkeligt problem med ajax og POST...

 

her er requesten (Sett fra FireBug:)

function print

path

path

path

path

session

session

session

session

session 05urog1q9c3s2pm16lbri6g966

text

title ajax.js

 

og her er js function som sender dette:

 

    
function print_remote() {
       filename = document.getElementById('info').filename.value;
       index = filename.lastIndexOf("\\");

       filenm = filename.substr(index + 1);
       
       url = "ajax_post.php";
       
       post = "";
       post += "function="+encodeURI("print");
       post += "&title="+encodeURI(filenm);
       post += "&session="+encodeURI(document.getElementById('info').session.value);
       post += "&text="+encodeURI(document.getElementById('text').value);
       
       xmlHttp = getXML();    
       xmlHttp.abort();
       
       xmlHttp.onreadystatechange=print_remote_response;

       xmlHttp.open("POST",url,false); 
              
       xmlHttp.overrideMimeType('text/html');
       xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
       xmlHttp.setRequestHeader("Connection", "close");
       
       xmlHttp.send(post);   
   }

Noen som vet hvorfor dette skjer?

Lenke til kommentar
Videoannonse
Annonse
Gjest Slettet+142

jeg har lest litt rundt om ajax open-funksjonen..

et sted på denne siden, nevner de at når det tredje argumentet i open-funksjonen er satt til false, klikker firefox. og jeg skjønner igrunn ikke hva som er forskjellen på om den er true eller false det siste argumentet =/

 

Utdrag ifra siden jeg linken til over

 

open() Function

    //By calling this file, we have saved the data.

    http.open("GET","save_data.php?comment=" + comment + "&email=" + email + "&return=none",true);Here, we are opening the connection to the server side scirpt using the XMLHTTPRequest object. We used the open() function. The three arguments for this function are...

 

Method

GET, POST or HEAD. This argument specify which method must be used in transporting the given data to the new file. Using the GET method, we will be able to pass the data to the server side script in the url itself - like this url.php?data=value. The POST method will send the data after the connection is opened. The HEAD method can be used to get the headers of the url without having to download the entire page. The method can be specified as the fourth argument of the load function in jx.

URL

The URL of the file that must be opened - the location of the server side script. This can be a absolute URL like(http://www.openjs.com/feedback.php) or a relative one(../../feedback.php). A note of caution - this URL should be in the same domain as the script is. You cannot call a script in google.com from a script that is running in yahoo.com. This is a security measure implemented in most browsers to prevent XSS.

Asynchronous/Synchronous

This argument will be true if the request is asynchronous and false if it is synchronous. If it is Synchronous, the browser will suspend all activity till the response is received. This causes firefox to freeze up. Asynchronous requests don't have this problem - they will download the new page in the background - allowing the user to do other things.

 

Lenke til kommentar

Hvis 3dje argument i open er false, kan du jo droppe hele A'en i AJAX (Asynkron).

 

Så klart firefox låser seg på en synkron request (false), alle gjør det - det er derfor vi bruker true (asynkron).

 

Synkron:

Last side

Ajax request

Vente på data

Vente på data

Vente på data

Gjøre noe med dataene

-Gjøre noe annet

 

Asynkron:

Last side

Ajax request

Når data er klare -> Gjør noe med datene

-Gjøre noe annet

-Gjøre noe annet

-Gjøre noe annet

Dataene klare -> Gjør noe med dataene

-Gjøre noe annet

 

"Gjøre noe annet" gjelder ikke bare JS, når du bruker synkron overføring låser hele nettleseren seg. Antagelig.

Endret av Kagee
Lenke til kommentar

takker for svar, mekrelig at ff skulle klikke fordet:( men men..

 

[EDIT] har endret alle xmlHttp.open kallene til async nå, men det var ingen forandring:(

 

Noen andre ideer?

 

ps. her er koden:

Klikk for å se/fjerne innholdet nedenfor
   function print_remote() {
       filename = document.getElementById('info').filename.value;
       index = filename.lastIndexOf("\\");

       filenm = filename.substr(index + 1);
       
       xmlHttp = getXML();    
       xmlHttp.abort();
       
       xmlHttp.onreadystatechange=print_remote_response;

       xmlHttp.open("POST","ajax_post.php", true); 
              
       xmlHttp.overrideMimeType('text/html');
       xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
       xmlHttp.setRequestHeader("Connection", "close");
       
       post = "";
       post += "function="+encodeURI("print");
       post += "&title="+encodeURI(filenm);
       post += "&session="+encodeURI(document.getElementById('info').session.value);
       post += "&text="+encodeURI(document.getElementById('text').value);
       
       xmlHttp.send(post);   
   }

Endret av Richard87
Lenke til kommentar
Gjest Slettet+142

du er sikker på at ajax_post.php skriver ut det den skal?

at den behandler requesten?

da kan du iaf skille ut om det er noe gale med ajax eller om det er php.

evt kan du kjøre en "alert(post);" før du kjører "xmlHttp.send(post)" og se hva som kommer opp ;)

Endret av Slettet+142
Lenke til kommentar

har gjort det, og alt kommer opp, men i php skriptet får jeg feilmelding fordi ikke all informasjonen er der,den returnerer "POST Function Not Registered! (LoadFunction)" <-- som jeg tipper er den gamle funksjonen som ble sendt,

 

her er ajax_post.php:

Klikk for å se/fjerne innholdet nedenfor
<?php
   include_once('functions.php');

   if (session_id() == "") {
       session_start();
       session_id($_POST['session']); 
   }
   
   if (auth($_SESSION['user'], $_SESSION['md5']) == 1) {        
       $fn = str_replace("\\\\", "\\", $_POST['filename']);
       
       switch ($_POST['function']) {
           case "savefile":
               $fh = fopen ($fn,"w+");
               if (fwrite($fh, $_POST['text']) == false) {
                   echo $_POST['filename'];
               } else {
                   echo "successful\n";
               }
               fclose($fh);
               break;
           case 'print':
               debugprint("Printing...");
               
               $ph = printer_open("\\\\BLACKHAWK\\SamsungM");
               debugprint("PV: ".printer_get_option($ph, PRINTER_DRIVERVERSION));
               debugprint("PH: ".$ph);
               
               printer_start_doc($ph, $_POST['title']);
               printer_start_page($ph);
               
               printer_set_option($ph, PRINTER_TITLE, $_POST['title']);
               printer_set_option($ph, PRINTER_MODE, "RAW");
               
               //printer_write($ph, $_POST['text']);
               printer_write($ph, "data fdsjflgksjlfdjøgk");
               
               printer_end_page($ph);
               printer_end_doc($ph);
               printer_close($ph);
               debugprint("Finnished Printing");
               echo "successful\n";
               break;
           default:
               echo "POST Function Not Registered! (".$_POST['function'].")";
               break;
       }
   } else {
       echo "Not Authenticated!\n";
   }
?>

 

(btw, selve printingen fungerer ikke, men den burde printet ut "successful\n")

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...