как да извикам функция на python в функцията за щракване на javascript


Отговор 1:

Здравей! Както посочиха други, ще трябва да направите заявка AJAX към уеб сървър, който ще извика вашия python скрипт чрез манипулатор за получаване или публикуване на заявки. Ако използвате JavaScript рамка, можете също да използвате http услугата на тази рамка, за да отправите заявка за получаване до вашия сървър, която ще осъществи извикване на вашия python скрипт. Например, ако използвате AngularJS, бихте използвали неговата услуга $ http, за да отправяте заявките и да получавате данни обратно. Има смисъл?

Ето пример AJAX скрипт, за да направите заявка за получаване на вашия сървър, който след това ще изпълни python скрипт:

$ ("# target"). щракнете (функция () { $ .ajax ({ тип: „вземи“, url: '/ URLToTriggerGetRequestHandler', кеш: невярно, async: 'асинхронен', dataType: 'json', успех: функция (данни) { console.log (JSON.stringify (данни)) }, грешка: функция (заявка, състояние, грешка) { console.log ("Грешка:" + грешка) } });});

Ето как би изглеждал манипулаторът на заявки на сървъра (използвам вградения в python http.server, за да създам този клас на манипулатора):

ЗАБЕЛЕЖКА: Трябва да импортирате вашия python скрипт в сървърния файл, за да го намери, когато трябва да го извика.

# Този клас съдържа методи за обработка на нашите заявки към различни URI в приложениетоклас MyHandler (SimpleHTTPRequestHandler): def do_HEAD (самостоятелно): self.send_response (200) self.send_header ('Content-type', 'text / html') self.end_headers () # Проверете URI на заявката, за да обслужва правилното съдържание. def do_GET (самостоятелно): ако "URLToTriggerGetRequestHandler" в self.path: # Ако URI съдържа URLToTriggerGetRequestHandler, изпълнете python скрипта, който му съответства, и вземете тези данни # каквото изпратим, за да "отговорим" като аргумент, ще бъде изпратено обратно на клиента съдържание = pythonScriptMethod () self.respo (съдържание) # можем да извлечем отговор в този обхват и след това да предадем информация на self.respo друго: super (MyHandler, самостоятелно) .do_GET () # запазва статичния src файл по подразбиране def handle_http (самостоятелно, данни): self.send_response (200)# задайте типа данни за заглавката на отговора. В този случай това ще бъде json. # задаването на тези заглавки е важно за браузъра, за да знае с какво да се занимава# отговорът. По този начин браузърите могат да бъдат много придирчиви. self.send_header ('Content-type', 'application / json') self.end_headers () връща байтове (данни, 'UTF-8')# отговор на магазина за доставка обратно на клиента. Това е добре да го направите # потребителят има начин да разбере какъв е отговорът на сървъра. def response (самостоятелно, данни): отговор = self.handle_http (данни) self.wfile.write (отговор)# Това е основният метод, който ще задейства сървъра. ако __name__ == '__main__': server_class = HTTPS сървър httpd = сървър_клас ((HOST_NAME, PORT_NUMBER), MyHandler) print (time.asctime (), 'Стартиране на сървъра -% s:% s'% (HOST_NAME, PORT_NUMBER)) опитвам: httpd.serve_forever () с изключение на KeyboardInterrupt: мине httpd.server_close () print (time.asctime (), 'Спиране на сървъра -% s:% s'% (HOST_NAME, PORT_NUMBER))

Надявам се това да помогне! Уведомете ме, ако имате някакви въпроси относно този пример или все още имате проблеми :)


Отговор 2:

Важното тук е да разберете, че всъщност не използвате Python скрипт, използващ Javascript.

Вместо това сте:

  • стартиране на python скрипт чрез HTTP заявка
  • отправяне на HTTP заявка чрез AJAX

Ако го разглеждате като 2 напълно отделни неща, ще ви е по-лесно.

т.е. скриптът на python всъщност не се интересува дали е извикан от AJAX или просто от уеб браузър - така че първо го тествайте само с помощта на браузъра

По същия начин кодът на AJAX не се интересува дали говори с Python, Perl, Java или дори просто със статична уеб страница - така че не се колебайте да тествате този код със статично съдържание.

Благодаря ви, че четете.


Отговор 3:

Например, използвайки jQuery, можете да направите нещо като:

$ .getJSON ('http://example.com/your/webservice?param1=x¶m2=y', функция (данни, textStatus, jqXHR) { предупреждение (данни); })

Ще трябва да внедрите уеб услуга на python от страна на сървъра. За прости уеб услуги, които обичам да използвам

Колба

.

Типично изпълнение изглежда така:

@ app.route ("/ your / webservice")def my_webservice (): върнете jsonify (резултат = някаква_функция (** request.args))

Отговор 4:

1. Напишете приложение от страна на сървъра в Python. Дефинирайте URL (маршрут), който изпълнява вашия скрипт. 2. Във вашия Javascript код направете HTTP заявка към URL адреса, определен в стъпка 1.

Надявам се, че помага.


Отговор 5:

На първо място благодаря Snigdha Prakash за вас A2A.

$ .ajax ({ url: "/ path / to / your / scriptPython", успех: функция (отговор) { // тук правите каквото искате с променливата за отговор }});

Надявам се, че помага :)


Отговор 6:

Трябва да разширите своя Javascript код в браузъра, за да направите заявка обратно към сървъра, където се изпълнява вашият Python скрипт. В парадигмата на MVC JS е в изгледа, кодът на Python е в модела и не сте посочили контролер. Без знание какъв сървър за уеб приложения използвате, където живее кодът на Python, не мога да се осмеля да предположа с по-голяма конкретност.


Отговор 7:
$ .ajax ({ url: "/ path / to / your / script", успех: функция (отговор) { // тук правите каквото искате с променливата за отговор }});