ODOO: как вызвать функцию python из javascript [duplicate]

Сначала проверьте URL-адрес, который может быть неправильным, если он правильный, проверьте корпус запроса, который вы отправляете, возможной причиной является запрос, который вы отправляете, отсутствует правильный синтаксис.

Чтобы разработать, проверьте специальные символы в строке запроса. Если используется (специальный символ), это является основной причиной этой ошибки.

попытайтесь скопировать запрос и проанализировать все данные тэгов.

46
задан xralf 1 November 2012 в 12:52
поделиться

4 ответа

Все, что вам нужно, это сделать запрос ajax на ваш pythoncode. Вы можете сделать это с помощью jquery http://api.jquery.com/jQuery.ajax/ или использовать только javascript

$.ajax({
  type: "POST",
  url: "~/pythoncode.py",
  data: { param: text}
}).done(function( o ) {
   // do something
});
35
ответ дан Salvador Dali 26 August 2018 в 15:21
поделиться

Обычно вы должны выполнить это, используя запрос ajax, который выглядит как

var xhr = new XMLHttpRequest();
xhr.open("GET", "pythoncode.py?text=" + text, true);
xhr.responseType = "JSON";
xhr.onload = function(e) {
  var arrOfStrings = JSON.parse(xhr.response);
}
xhr.send();
7
ответ дан Asad Saeeduddin 26 August 2018 в 15:21
поделиться

Вы не можете запускать .py файлы из JavaScript без программы Python, так как вы не можете открывать файлы .txt без текстового редактора. Но все это становится дыханием с помощью Web API Server (IIS в примере ниже).

  1. Установите python и создайте файл-образец test.py
    import sys
    # print sys.argv[0] prints test.py
    # print sys.argv[1] prints your_var_1
    
    def hello():
        print "Hi" + " " + sys.argv[1]
    
    if __name__ == "__main__":
        hello()
    
  2. Создайте метод на вашем веб-сервере API
    [HttpGet]
    public string SayHi(string id)
    {
        string fileName = HostingEnvironment.MapPath("~/Pyphon") + "\\" + "test.py";          
    
        Process p = new Process();
        p.StartInfo = new ProcessStartInfo(@"C:\Python27\python.exe", fileName + " " + id)
        {
            RedirectStandardOutput = true,
            UseShellExecute = false,
            CreateNoWindow = true
        };
        p.Start();
    
        return p.StandardOutput.ReadToEnd();                  
    }
    
  3. И теперь для вашего JavaScript:
    function processSayingHi() {          
       var your_param = 'abc';
       $.ajax({
           url: '/api/your_controller_name/SayHi/' + your_param,
           type: 'GET',
           success: function (response) {
               console.log(response);
           },
           error: function (error) {
               console.log(error);
           }
        });
    }
    

Помните, что ваш .py-файл не будет запускается на компьютере пользователя, но вместо этого на сервере.

2
ответ дан Community 26 August 2018 в 15:21
поделиться

Из document.getElementsByTagName я предполагаю, что вы запускаете javascript в браузере.

Традиционный способ разоблачения функции javascript, запущенной в браузере, вызывает удаленный URL-адрес с использованием AJAX. X в AJAX для XML, но в настоящее время каждый использует JSON вместо XML.

Например, используя jQuery, вы можете сделать что-то вроде:

$.getJSON('http://example.com/your/webservice?param1=x&param2=y', 
    function(data, textStatus, jqXHR) {
        alert(data);
    }
)

Вам нужно будет реализовать веб-сервис python на стороне сервера. Для простых веб-сервисов я хотел бы использовать Flask .

Типичная реализация выглядит так:

@app.route("/your/webservice")
def my_webservice():
    return jsonify(result=some_function(**request.args)) 

Вы можете запускать IronPython (вроде Python.Net) в браузере с помощью silverlight , но я не знаю, доступен ли NLTK для IronPython.

23
ответ дан Paulo Scardine 26 August 2018 в 15:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: