2016-11-13 26 views
0

考えられるのは、JSのHTML要素IDを含む配列をPythonスクリプトにAJAXを使って送信することです。私はStackoverflowでも複数の例を見てきましたが、今までのところどれもうまくいきませんでした。JS配列がAJAXのPythonスクリプトに送信されない

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 
     }, 
    }); 
} 

問題は、Pythonスクリプトは、何の配列データを取得していないと、変数は、私がgetvalueメソッドを使用するのpython側でPython側 に空のままです。私はエラーがdata:定義と仮定します。そして、私は使用しないでくださいJSON ここで間違って定義されていることのヒントを教えてください? AJAX Postメソッドで

編集


コードのpython側の

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リクエストの内容は、stdinのCGIモジュールに提供され、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

、あなたは、POSTメソッドを作成する前にこれを試して、JSONとしてテストを送信する必要があります。

obj = JSON.stringify(test); 

次に、データパラメータを次のように変更します。

"data": obj 

うまくいくはずです。

+0

OPはjQueryを使用しています。 jQueryはそれを自動的に処理します。 – Ouroborus

+1

jsonにシリアル化すると、デフォルトの 'contentType'を変更する必要があります。また、サーバーの要求本体にjsonが必要です。この回答は不完全で誤解を招く – charlietfl

関連する問題