Почему я получаю ‘undefined’ в предупреждении Javascript, отображаемом после вызова скрипта Python CGI?

#javascript #jquery #python #ajax #python-3.x

#javascript #jquery #python #ajax #python-3.x

Вопрос:

Я пытаюсь реализовать пример ajax / python, но когда отображается предупреждение, сообщение просто «undefined», а не вывод, который я должен получать в соответствии с руководством. Все, что я смог найти, указывает на то, что проблема заключается в том, что javascript не получает ответ от веб-сервера, но я не могу понять почему. Я довольно новичок в Javascript, поэтому буду признателен за любую помощь.

HTML (‘test.html ‘)

 <!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">

    <title>test</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    <script>

        $(function()
        {
            $('#clickme').click(function(){
                alert('Im going to start processing');

                $.ajax({
                    url: "/scripts/py_test.py",
                    type: "post",
                    datatype:"json",
                    data: {'key':'value','key2':'value2'},
                    success: function(response){
                        alert(response.message);
                        alert(response.keys);
                    }
                });
            });
        });

    </script>
</head>
<body>
    <button id="clickme"> click me </button>
</body>
</html>
  

Python (scripts/py_test.py )

 #!/usr/bin/env python

import sys
import json
import cgi

fs = cgi.FieldStorage()

sys.stdout.write("Content-Type: application/json")

sys.stdout.write("n")
sys.stdout.write("n")


result = {}
result['success'] = True
result['message'] = "The command Completed Successfully"
result['keys'] = ",".join(fs.keys())

d = {}
for k in fs.keys():
d[k] = fs.getvalue(k)

result['data'] = d

sys.stdout.write(json.dumps(result,indent=1))
sys.stdout.write("n")

sys.stdout.close()
  

Когда я запускаю скрипт python из терминала, я получаю следующий вывод:

 Content-Type: application/json

{
"keys": "", 
"message": "The command Completed Successfully", 
"data": {}, 
"success": true
}
  

Редактировать:
Сетевой монитор моего браузера показывает, что я возвращаю исходный код скрипта python.

Комментарии:

1. И что говорит сетевой монитор в вашем браузере, что возвращается из скрипта python?

2. Вместо alert() того, чтобы попробовать console.log() все response и посмотреть, что вы получите. Кроме того, включите fail обратный вызов ajax-вызова jquery, чтобы узнать, получаете ли вы какую-то ошибку сбоя. Ваши журналы консоли можно просмотреть, если щелкнуть правой кнопкой мыши страницу и нажать «Проверить», чтобы открыть свой инструмент debugger.

3. Другим вариантом было бы поместить debugger что-нибудь в ваш вызов ajax, чтобы ваш отладчик приостановил этот метод и позволил вам просмотреть, что представляет собой каждая переменная. Попробуйте это и сообщите нам, какие результаты вы получите. Извините, я не могу помочь вам с Python.

4. @FlorianHeer Сетевой монитор показывает, что я получаю исходный код из скрипта python обратно.

5. Похоже, вам нужно настроить свой веб-сервер для выполнения cgi. Вы используете локальный сервер или используете файловый протокол?