2016-11-13 2 views
0

Идея состоит в том, чтобы отправить массив JS, содержащий идентификаторы элементов HTML для скрипта python, используя AJAX. Я просмотрел несколько примеров, также в Stackoverflow, но ни один из них не работал до сих пор.JS array не отправлен в скрипт python с AJAX

Моя JS функция:

function callpc1() { 
    var pcimages = document.querySelectorAll('.pcpics'); 
    test = []; 
    test[0] = pcimages[0].id; 
    test[1] = pcimages[1].id; 
    test[2] = pcimages[2].id; 
    $.ajax({ 
     type: "POST", 
     url: "/~.../pcmove1.py", 
     data: { 
      test:test 
     }, 
    }); 
} 

Проблема питон скрипт не получает никаких данных массива и переменная остается пустой на стороне питона На стороне питона я использую getvalue метод. Я предполагаю, что ошибка связана с определением data:. И я бы избегал использовать JSON Пожалуйста, дайте намек на то, что здесь неправильно определено?

Редактировать


код на стороне питона

import cgi 
page = cgi.FieldStorage() 
listed = page.getvalue('test', "unsuccess") 
results = open("test.txt", "aw") 
results.write (listed) 
results.close() 
+1

Что код на стороне Python? – Ouroborus

+0

@Ouroborus Я отредактировал мой вопрос, добавил код python, а также –

ответ

1

Модуль Python cgi выполняет обработку, которая не подходит для представленных данных JSON. В частности, содержимое запроса POST предоставляется модулю CGI по адресу stdin, а cgi.FieldStorage() читает это и пытается преобразовать его во что-то полезное, но предполагает нормальное представление формы. Другие данные предоставляются как переменные среды.

Настройка вашего примера, вы можете быть в состоянии получить свои почтовые данные в качестве объекта Python, как это:

import sys, os 
import json 

length = os.environ["CONTENT_LENGTH"] 
raw = sys.stdin.read(length) 
data = json.loads(raw) 
# Now we have a Python object representing the JSON data 

# Convert the Python object back into a JSON formatted string 
# and save to file 
results = open("test.txt", "aw") 
results.write(json.dumps(data)) 
results.close() 
-1

В методе AJAX сообщение, вы должны отправить тест как JSON, попробуйте это, прежде чем сделать метод Post:

obj = JSON.stringify(test); 

Затем измените свой параметр данных с помощью:

"data": obj 

Должно работать.

+0

OP использует jQuery. jQuery обрабатывает это автоматически. – Ouroborus

+1

Если вы сериализуете json, вам нужно изменить defaultTextType, а также ожидать json в теле запроса на сервере. Этот ответ неполный и вводящий в заблуждение – charlietfl

Смежные вопросы