【问题标题】:ajax pass parameters to python scriptajax将参数传递给python脚本
【发布时间】:2016-09-02 13:32:38
【问题描述】:

我有这个 python CGI 脚本,我使用以下命令启动并运行:

python3 -m http.server --cgi 8000

python 脚本的重要部分是:

parameter = cgi.FieldStorage()
artiest = parameter.getvalue("artiest")
rijen_aantal = parameter.getvalue("rijen")
kolommen_aantal = parameter.getvalue("kolommen")

现在我想做的是在我的 html/javascript 中,我想将从表单获得的值传递给我的 cgi 脚本。

在 html 中,我使用 bootstrap 编写了以下表单:

<form class="form-inline" role="form" method="POST" action="cgi-bin/schuifpuzzel.py">
<div class="form-group">
    <label for="artiest">Artiest:</label>
    <input type="text" class="form-control margin-right" id="artiest">
</div>
<div class="form-group">
    <label for="rij">Rijen:</label>
    <input type="number" class="form-control margin-right" id="rij">
</div>
<div class="form-group">
    <label for="kolom">Kolommen:</label>
    <input type="number" class="form-control margin-right" id="kolom">
</div>
<button type="submit" class="btn btn-default">Submit</button>

在 javascript 中,我编写了以下代码,我在 html 标头中调用。

$(function () {

var artiest = document.getElementById("myForm").elements[0].value;
var rijen = document.getElementById("myForm").elements[1].value;
var kolommen = document.getElementById("myForm").elements[2].value;
$.ajax({
    url: 'cgi-bin/schuifpuzzel.py',
    type: 'post',
    datatype: "json",
    data: JSON.stringify({'artiest': artiest, "rijen": rijen, "kolommen": kolommen}),
    success: function(response) {
        alert(response);
    }
})

});

但这由于某种原因不起作用。它所做的只是下载.py。

我在这里做错了什么?

更新:

新问题。我认为发布问题已经解决了。

然后我收到以下错误:

No 'Access-Control-Allow-Origin' header is present on the requested resource

我已经通过使用 yoshyosh 在此发布的解决方案解决了这个问题 post

但现在由于某种原因我收到此错误:

我不知道为什么,因为我的脚本的路径是正确的?

【问题讨论】:

  • 我认为问题在于您的 AJAX 调用发送的数据是 JSON,而不是形成编码的键值对。您在 CGI 脚本中访问值的方式需要将数据作为表单编码的键值对发送。
  • 那我该怎么做呢?因为我只是复制了类似问题的解决方案

标签: javascript python ajax


【解决方案1】:

在您的表单上使用.serialize() 将数据作为表单数据发送,而不是作为 JSON。

$.ajax({
    ...
    data: $('.form-inline').serialize(),
    ...
})

【讨论】: