繁体   English   中英

我如何使用javascript中的ajax调用将参数或ajax数据传递给python脚本并在成功时获得响应?

[英]how do i pass parameter or ajax data to a python script using ajax call in javascript and get response if it is successful?

我想将 jquery 中 ajax 调用中使用的所有参数传递给一个 python 文件或脚本,我用它来与数据库通信并一次完成所有计算,并将这些计算更新或发送到数据库或直接将响应发送到ajax 调用成功。 我添加了一个示例 jquery 和 python 代码,其中没有传递给它的参数。 但如果用户进行任何更改,我想在 python 脚本中传递数据。

 $(document).ready(function(){ $('#filter_graph_by_date').click(function(){ var from_date =$('#start_date').val(); var to_date =$('#end_date').val(); var customer =$('#customer_filters').val(); var machine =$('#machine_filters').val(); var cytype = $('#cyType_filters').val(); var cystatus = $('#cyStatus_filters').val(); var net = $('#ByNetWts').val(); var res = $('#ByResWts').val(); if(from_date != '' && to_date != ''){ $.ajax({ url:"statistics.py", type:"POST", dataType:"json", data: { from_date: from_date, to_date: to_date, customer: customer, machine: machine, cytype: cytype, cystatus: cystatus, net:net, res:res, }, success: function(data) { }, error: function(data) { console.log(data); } }) } }) })

 import os, sys, time import pymysql from json2html import * import string PRJ_DB = 'plcproject' def get_values_Keys(band_limit, first_key, last_key, frm, to, keys, diff): col_limit = {}; key_vals = {}; key_vals[first_key] = 0; key_vals[last_key] = 0; lastKey_count = 0; for key in keys: col_limit[key] = [(key - band_limit), (key + band_limit)]; key_vals[str(key)] = 0; for dif_val in diff: val = dif_val; if (val < frm): key_vals[first_key] += 1; elif (val > to): lastKey_count += 1; else: for key in keys: if ((val >= col_limit[key][0]) and (val < col_limit[key][1])): key_vals[str(key)] += 1; break; key_vals[last_key] = lastKey_count; out_row = {}; cnt = 0; #final_row = [] out_row[cnt] = [ first_key, key_vals[first_key]]; #final_row.append(key_vals[first_key]) cnt = 1; for key in keys: #print("Key:", key) out_row[cnt] = [str(key), key_vals[str(key)]]; #final_row.append(key_vals[str(key)]) cnt += 1; out_row[cnt] = [last_key, key_vals[last_key]]; #final_row.append(key_vals[last_key]) #print("Final Row:", final_row) return out_row; def get_average_key_val(mc, keyVals): keyVals_list = [] key_val_dict = {} keys = [] vals = [] mult_items = 0 sum = 0 cnt = 0 keyVals_list = list(keyVals.values())[1:][:-1] for item in keyVals_list: key, val = item[0], item[1] keys.append(key) vals.append(val) sum+=val try: prod = int(key)*int(val) mult_items+=prod if prod: cnt+=1 except: continue i = 0 key_val_dict['machine'] = mc for key in keys: key_val_dict[key] = vals[i] i+=1 key_val_dict['sum'] = sum try: key_val_dict['Average'] = "{:.2f}".format(mult_items/cnt) except: key_val_dict['Average'] = 0 return key_val_dict if __name__ == '__main__': mydb = pymysql.connect(host="localhost", user="root", passwd="", database=PRJ_DB) db_coursor = mydb.cursor() db_coursor.execute("SELECT differences, machine FROM productiondetail WHERE status = 1") data_rows = db_coursor.fetchall() machine_list = [] diff_rows = [] for data in data_rows: #0 --> rangefrom 1--> rangeto, 2--> leastcount diff_rows.append(data[0]) machine_list.append(data[1]) #print(diff_rows, machine_list) cnt = 0 mc_diff = {} for mc in machine_list: try: mc_diff[mc].append(diff_rows[cnt]) except: print("First value for ", mc) mc_diff[mc] = [] mc_diff[mc].append(diff_rows[cnt]) cnt+=1 db_coursor.execute("SELECT rangefrom, rangeto, leastcount FROM othersettings WHERE id = 1"); data_rows = db_coursor.fetchall() for data in data_rows: #0 --> rangefrom 1--> rangeto, 2--> leastcount rangefrom = int(data[0]) rangeto = int(data[1]) leastcount = int(data[2]) band_limit = leastcount / 2; first_key = '<'+str(rangefrom); last_key = '>'+str(rangeto); print("==== ", rangefrom, rangeto, leastcount) keys = []; key_vals_dict_list = [] key_vals_dict = {}; cnt = 0 for i in range(rangefrom, rangeto, leastcount): #print(i) keys.append(i) cnt += 1 final_lst = [] sum_avg = ['sum', 'Average'] header = ['Machine_range']+keys + sum_avg final_lst.append(header) header_len = len(header) for mc in mc_diff: #print("Machine %s Graph Array List :" %mc) key_vals_array = get_values_Keys(band_limit, first_key, last_key, rangefrom, rangeto, keys, mc_diff[mc]); #print (key_vals_array) #print() tmp = get_average_key_val(mc, key_vals_array) final_lst.append(tmp.values()) key_vals_dict_list.append(tmp) #print("Full Graph Array List:") key_vals_array = get_values_Keys(band_limit, first_key, last_key, rangefrom, rangeto, keys, diff_rows); #print (key_vals_array) #print() temp = get_average_key_val('Total', key_vals_array) tot_perc = dict(temp) tot_vals = temp.values() final_lst.append(tot_vals) tot_sum = temp['sum'] for k, v in temp.items(): #print("++++++++",k, v) if v == 'Total': tot_perc[k] = "Total %" elif k == 'sum': tot_perc[k] = 100 elif k == 'Average': tot_perc[k] = "" elif isinstance(v, int): try: tot_perc[k] = "{:.2f}".format((v/tot_sum) * 100) except: tot_perc[k] = 0.0 else: continue key_vals_dict_list.append(temp) key_vals_dict_list.append(tot_perc) final_lst.append(tot_perc.values()) #for k, v in temp.items(): input = {"statistics":key_vals_dict_list} #print(input) html_data = json2html.convert(json = input) fo = open("test.html", 'w') fo.write(html_data) fo.close() #print(final_lst) #Clear DB Table sql = "TRUNCATE TABLE statistics" db_coursor.execute(sql) mydb.commit() #create Table array elements; chr_set = string.ascii_lowercase[:header_len] c_len = 26 - header_len ch_ar = "" for i in range(c_len): ch_ar += ' ,' ch_ar= ch_ar.strip(",") stat_sql = "INSERT INTO statistics (`a`, `b`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `n`, `o`, `p`, `q`, `r`, `s`, `t`, `u`, `v`, `w`, `x`, `y`, `z`) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"; for data in final_lst: data=list(data)+ch_ar.split(",") for i in range(0, len(data)): data[i] = str(data[i]) #Update new values data = tuple(data) #print(stat_sql) print(data) db_coursor.execute(stat_sql, data) mydb.commit()

试试这个..使用数据:JSON.stringify

$(document).ready(function(){

    $('#filter_graph_by_date').click(function(){ 
                      
        var from_date =$('#start_date').val();

        var to_date =$('#end_date').val();
                    
        var customer =$('#customer_filters').val();
                            
        var machine =$('#machine_filters').val();
         
        var cytype = $('#cyType_filters').val();

        var cystatus = $('#cyStatus_filters').val(); 
            
        var net = $('#ByNetWts').val(); 

        var res = $('#ByResWts').val();
                      
        if(from_date != '' && to_date != ''){
            $.ajax({
                url: '"statistics.py"',
                dataType: 'json',
                type: 'post',
                contentType: 'application/json',
                data: JSON.stringify( {  from_date: from_date, 

                    to_date: to_date,
                                
                    customer: customer, 
                    
                    machine: machine,

                    cytype: cytype, 

                    cystatus: cystatus,
                    
                    net:net,
                    
                    res:res } ),
                
                processData: false,
                success: function( data, textStatus, jQxhr ){
                    $('#response pre').html( JSON.stringify( data ) );
                },  
                error: function( jqXhr, textStatus, errorThrown ){
                    console.log( errorThrown );
                }
           });            
            

暂无
暂无

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

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