(对于任何后端开发,我都是一个完全的初学者,所以如果使用错误的话,我会道歉)
我有一些javascript控制画布游戏,我有一个prolog策划,可以解决游戏。我现在正在尝试连接这两个并设置了一个烧瓶服务器,它可以成功调用prolog,获得正确的计划并将其发送回javascript。我真的很难从javascript获得正确的输入。
Javascript:
var state = {
state : "[stone(s1),active(s1), stone(s2), in(app2,s2), unlocked(app2)]"
}
stone2.on('click',function(){
$.ajax({
type: 'POST',
contentType: 'application/json',
data: state,
dataType: 'json',
url:'http://localhost:5000/next_move',
success:function(data, textStatus, jqXHR){
console.log(data);
alert(JSON.stringify(state)); //making sure I sent the right thing
}
});
});
Flask服务器
//variables I use in the query at the moment
state = "[stone(s1),active(s1), stone(s2), in(app2,s2), unlocked(app2)]"
goal = "[in(app1,s1),in(app1,s2)]"
@app.route('/next_move', methods=['POST'])
def get_next_step():
own_state = request.json
r = own_state['state']
output = subprocess.check_output(['sicstus','-l','luger.pl','--goal','go('+state+','+goal+').'])
//I would like to use the string I got from my browser here
stripped = output.split('\n')
return jsonify({"plan": stripped})
//the correct plan is returned
我已经看到了关于此的其他问题,实际上我发布的尝试来自flask request.json order,但我一直得到400(不良请求)。从那以后我猜测烧瓶变了?我知道它正确地发送了json,因为如果我不尝试触摸它,我会在浏览器中获得成功消息,因此纯粹是我无法访问其字段或查找任何示例。
答案 0 :(得分:1)
您通过POST发送的内容不是JSON。它只是set of key value对,因此您应该将其发送出去。并使用request.form
将其删除。
在你的情况下,我也不会使用jQuery $.ajax
而是使用$.post
。
以下是代码:
stone2.on('click',function(){
$.post('http://localhost:5000/next_move',
state,
function(data) {
console.log(data);
alert(JSON.stringify(state));
}
);
@app.route('/next_move', methods=['POST'])
def get_next_step():
own_state = request.form
r = own_state['state']
print r
return jsonify({"plan": "something"})