Ajax, Flask маршрут, данные добавлены в URL, ошибка сервера - PullRequest
0 голосов
/ 05 марта 2020

Я использую маршрут Flask, чтобы обновить базу данных MYSQL, и использую вызов AJAX, чтобы вызвать это событие. Всякий раз, когда я запускаю веб-страницу, я получаю внутреннюю ошибку сервера, потому что она добавляет? Bet = 1 к моему URL [и это не определенный URL]. Я действительно не понимаю, что мне нужно сделать, чтобы этого не произошло, и просто запустить нормальный маршрут, как определено в моем файле python. Я много читал, но я не программист [я ученый], и я не знаю, почему это происходит. Я думаю, что когда я отправляю URL AJAX, он автоматически обновляет URL с данными. Спасибо за помощь.

Custom.py маршрут, который я использую с Flask

@custom_code.route('/saveddd', methods=['POST','GET'])
def savdict():
# get form data from ajax 

    #bet = request.form['bet']

    try:
        bet = request.form['bet']

        db_url = "mysql+pymysql://root:Password!@127.0.0.1:3306/mydatabase"
        table_name = 'my_experiment_table'
        data_column_name = 'datastring'


        # boilerplace sqlalchemy setup
        # boilerplace sqlalchemy setup
        engine = create_engine(db_url, echo=True)#altered by adding echo
        conn=engine.connect()
        metadata = MetaData()
        metadata.bind = engine
        existingtable2 = Table('dictatordecisions', metadata, autoload=True)
        #print(existingtable2)
        #print ("1")
        insort = existingtable2.insert().values(Bet = bet)
        #fire = sqlalchemy.sql.expression.insert(existingtable2, values=.5, inline=False, bind=None, prefixes=None, returning=None, return_defaults=False)
        conn.execute(insort)

        return "cool it worked"
    except TemplateNotFound:
        abort(404)

AJAX вызов

function death6(){
    //var dictoatorresult = 0 
    //var selfammount = sliderfoo.value; 
    if (sliderfoo.value == "") {
        alert ("please complete the task")
    } else {dictatorchoice = sliderfoo.value;
            psiTurk.recordTrialData({'phase':'DictatorGame','status':'submit','choice':dictatorchoice});
            psiTurk.recordUnstructuredData('dictatordecision', dictatorchoice);
            psiTurk.recordUnstructuredData('dice rolls purchased', purchase);
            psiTurk.recordUnstructuredData('race manipulation if 1, plant if 2', condition);
            psiTurk.recordUnstructuredData('race answers', RaceAnswers);
            psiTurk.saveData();

            $.ajax({})

            $.ajax({



                cache: true,
                Type:'POST',
                url:'/saveddd',
                async: false,
                data :{"bet" : dictatorchoice},
                //crossDomain: true,
                //async: false,
                dataType: 'text'
                //processData: false,
                //beforeSend: function (xhr) {
                    //xhr.setRequestHeader("x-ajax-call", "no-cache");





                    })

            ;
            psiTurk.showPage('postquestionnaire.html')
    }
    //d3.selectAll("input").remove();
    //d3.selectAll("input").remove();
    //d3.selectAll("div").remove();
}

Button Maker


function makeButton2(text, callback){
    d3.select("body")
      .insert("p")
      .insert("p")
    d3.select("body")
      .insert("button") 
      .attr("type", "button")
      .attr("class", "btn btn-primary btn-lg")
      .text(text)
      .on("click", function(d){callback();});
}

Определение слайдера

    var sliderSlide = document.createElement("input");
    sliderSlide.setAttribute("type","number");
    sliderSlide.setAttribute("fontsize","500px");
    sliderSlide.setAttribute("min","0.00");
    sliderSlide.setAttribute("max","1.00");
    sliderSlide.setAttribute("step","0.01");
    //sliderSlide.setAttribute("placeholder","0.50");
    sliderSlide.setAttribute("id","sliderfoo");
    sliderSlide.setAttribute("style", "font-size:25px")
    //sliderSlide.setAttribute("syle","width: 300px");
    //sliderSlide.setAttribute("width","400")

1 Ответ

0 голосов
/ 05 марта 2020

?bet=1 означает, что вы отправляете его как GET, а не POST.

Возможно, проблема в том, что вы использовали Type: 'POST', но это должно быть method: 'POST'.

Вы также можете напрямую использовать $. Post () вместо $. ajax ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...