繁体   English   中英

将参数从javascript粘贴到python脚本时出错

[英]Error pasing arguments to python script from javascript

我有一个AJAX函数来发送参数并从python脚本中检索一些json对象。 我尝试将值从输入文本发送到脚本

AJAX代码

function ajax_get_json(){
    var results = document.getElementById("results");
    var hr = new XMLHttpRequest();
    var tipo = document.getElementById('tipo').value;
    var atributo = " " +tipo;
    document.getElementById('texto').innerHTML = atributo;
    hr.open("GET", "prov1.py", + atributo, true);
    hr.responseType = "JSON";
    hr.setRequestHeader("Content-Type", "application/json", true);
    hr.onreadystatechange = function() {
            if(hr.readyState == 4 && hr.status == 200) {
                    var data = JSON.parse(hr.responseText);
                        results.innerHTML = "";
                        for(var obj in data){
                                results.innerHTML +="<tr><td>"+ data[obj].id+"</td><td>"+data[obj].nombre+"</td><td>"+data[obj].tipo+"</td></tr>";
                        }
            }
    }
    hr.send(null);
    results.innerHTML = "requesting...";
}

我的python脚本是这个

#!/usr/local/bin/python2.7
import sys
import cx_Oracle
import json
import cgi
import cgitb
cgitb.enable()

form = cgi.FieldStorage()
tipo = form.getvalue('tipo')

#print "Content-Type: text/html; charset=utf-8\n\n";
print "Status: 200 OK"
print "Content-type: application/json\n";
#print
lst_proveedores=[]
conn_str = 'user/pass@database'
conn = cx_Oracle.connect(conn_str)
c = conn.cursor()
c.execute(""" select id_proveedor, nombre, tipo from mpc_proveedores where tipo = '%s' """ %tipo)
for row in c:
    record1 = {"id":row[0], "nombre":row[1], "tipo":row[2]}
    lst_proveedores.append(record1)
json_string = json.dumps(lst_proveedores)
print json_string
conn.close()

在命令行中,脚本工作正常(python prov1.py tipo = MMS),并从数据库中检索数据,但是当我尝试从AJAX检索数据时,脚本向我发送了一个空的json对象。 使用萤火虫我检查响应,只出现[]。

我认为AJAX函数有一些错误,因为出现时将参数发送为空(python prov1 tipo =)。 我是AJAX的新手,因此不确定我是否在AJAX中使用的功能不正确或是否在python脚本中使用。 如果有人知道更好的方法来检索数据,请告诉我

请帮助!!!!

几件事情:

  1. 更改
    var atributo = " " +tipo;
    进入
    var atributo = "?tipo=" + encodeURIComponent(tipo);
  2. 您应该检查代码中是否存在SQL注入漏洞
  3. 向服务器发出请求时,即使没有请求正文,也要发送Content-Type标头。 (GET请求永远不会有请求主体。)不会破坏任何内容,但是您应该将其取出。
  4. responseType是HTML5的一部分, 并非在所有浏览器中都可用

祝你好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM