kako pozvati python funkciju u javascript click funkciji


Odgovor 1:

Bok! Kao što su drugi naglasili, morat ćete uputiti AJAX zahtjev web poslužitelju koji će pozvati vašu python skriptu putem voditelja zahtjeva za dobivanje ili objavljivanje zahtjeva. Ako koristite JavaScript okvir, možete koristiti i http uslugu tog okvira za upućivanje zahtjeva za dobivanje poslužitelju koji će uputiti poziv vašoj python skripti. Na primjer, ako koristite AngularJS, koristili biste njegovu uslugu $ http za izradu zahtjeva i vraćanje podataka. Ima smisla?

Evo primjera AJAX skripte za upućivanje zahtjeva za dobivanje poslužitelju koji će zatim pokrenuti python skriptu:

$ ("# target"). click (function () { $ .ajax ({ tip: 'dobiti', url: '/ URLToTriggerGetRequestHandler', predmemorija: false, async: 'asinkroni', dataType: 'json', uspjeh: funkcija (podaci) { console.log (JSON.stringify (podaci)) }, pogreška: funkcija (zahtjev, status, pogreška) { console.log ("Pogreška:" + pogreška) } });});

Evo kako bi izgledao obrađivač zahtjeva poslužitelja (za izradu ove klase rukovatelja koristim ugrađeni python http.server):

NAPOMENA: Morate uvesti svoju python skriptu u datoteku poslužitelja kako bi je mogla pronaći kad je treba nazvati.

# Ova klasa sadrži metode za obradu naših zahtjeva za različite URI-je u aplikacijiklasa MyHandler (SimpleHTTPRequestHandler): def do_HEAD (self): self.send_response (200) self.send_header ('Vrsta sadržaja', 'tekst / html') self.end_headers () # Provjerite URI zahtjeva da posluži odgovarajući sadržaj. def do_GET (samo): ako je "URLToTriggerGetRequestHandler" u self.path: # Ako URI sadrži URLToTriggerGetRequestHandler, izvršite python skriptu koja mu odgovara i uzmite te podatke # sve što pošaljemo da "odgovori" kao argument, bit će poslano natrag klijentu content = pythonScriptMethod () self.respont (sadržaj) # možemo dohvatiti odgovor unutar ovog opsega i zatim proslijediti informacije self.responseu drugo: super (MyHandler, self) .do_GET () # prema zadanim postavkama čuva statičku src datoteku def handle_http (self, podaci): self.send_response (200)# postavite vrstu podataka za zaglavlje odgovora. U ovom slučaju to će biti json. # postavljanje ovih zaglavlja važno je da bi preglednik znao što učiniti# odgovor. Preglednici na ovaj način mogu biti vrlo izbirljivi. self.send_header ('Content-type', 'application / json') self.end_headers () povratni bajtovi (podaci, 'UTF-8')# odgovor trgovine za isporuku natrag klijentu. Ovo je dobro učiniti # korisnik može znati kakav je bio odgovor poslužitelja. def odgovor (ja, podaci): odgovor = self.handle_http (podaci) self.wfile.write (odgovor)# Ovo je glavna metoda koja će otpustiti poslužitelj. ako je __name__ == '__glavno__': poslužitelj_klasa = HTTPS poslužitelj httpd = klasa_poslužitelja ((HOST_NAME, PORT_NUMBER), MyHandler) print (time.asctime (), 'Pokretanje poslužitelja -% s:% s'% (HOST_NAME, PORT_NUMBER)) probati: httpd.serve_forever () osim KeyboardInterrupt: proći httpd.server_close () print (time.asctime (), 'Zaustavljanje poslužitelja -% s:% s'% (HOST_NAME, PORT_NUMBER))

Nadam se da ovo pomaže! Javite mi ako imate pitanja u vezi s ovim primjerom ili ako i dalje imate problema :)


Odgovor 2:

Ovdje je važno shvatiti da zapravo ne pokrećete Python skriptu pomoću Javascripta.

Vi ste umjesto toga:

  • pokretanje python skripte putem HTTP zahtjeva
  • izrada HTTP zahtjeva putem AJAX-a

Ako na to gledate kao na dvije potpuno odvojene stvari, bit će vam lakše.

tj. python skriptu zapravo nije briga zove li je AJAX ili samo web preglednik - zato je prvo testirajte samo pomoću preglednika

Slično tome, AJAX kod nije briga govori li s Pythonom, Perlom, Javom ili čak samo sa statičnom web stranicom - zato slobodno testirajte taj kod sa statičkim sadržajem.

Hvala na čitanju.


Odgovor 3:

Na primjer, pomoću jQueryja možete učiniti nešto poput:

$ .getJSON ('http://example.com/your/webservice?param1=x¶m2=y', funkcija (podaci, textStatus, jqXHR) { upozorenje (podaci); })

Morat ćete implementirati python web uslugu na strani poslužitelja. Za jednostavne web usluge koje volim koristiti

Tikvica

.

Tipična implementacija izgleda:

@ app.route ("/ your / webservice")def my_webservice (): vrati jsonify (rezultat = neka_funkcija (** zahtjev.args))

Odgovor 4:

1. Napišite aplikaciju na strani poslužitelja u Pythonu. Definirajte URL (rutu) koja pokreće vašu skriptu. 2. U svom Javascript kodu pošaljite HTTP zahtjev na URL definiran u koraku 1.

Nadam se da pomaže.


Odgovor 5:

Prije svega hvala Snigdha Prakash na vašem A2A.

$ .ajax ({ url: "/ put / do / vašeg / scriptPythona", uspjeh: funkcija (odgovor) { // ovdje radite što god želite s varijablom odgovora }});

Nada koja pomaže :)


Odgovor 6:

Morate proširiti svoj Javascript kôd u pregledniku da biste poslali zahtjev natrag poslužitelju, gdje se izvodi vaša Python skripta. U MVC paradigmi, JS je u prikazu, Python kôd je u modelu, a niste naveli kontroler. Bez znanja o tome kakav poslužitelj web aplikacija koristite gdje živi Python kôd, ne mogu nagađati s više specifičnosti.


Odgovor 7:
$ .ajax ({ url: "/ put / do / tvoje / skripte", uspjeh: funkcija (odgovor) { // ovdje radite što god želite s varijablom odgovora }});