解析flask 0.9中的json请求

解析flask 0.9中的json请求,json,flask,sicstus-prolog,Json,Flask,Sicstus Prolog,(对于任何后端开发,我都是一个完全的初学者,因此如果有任何术语使用错误,我深表歉意) 我有一些javascript控制一个画布游戏,我有一个prolog计划者可以解决这个游戏。我现在正在尝试将两者连接起来,并建立了一个flask服务器,它可以成功地调用prolog,获得正确的计划并将其发送回javascript。我真的很难从javascript中获得正确的输入 Javascript: var state = { state : "[stone(s1),active(s1), stone(s2

(对于任何后端开发,我都是一个完全的初学者,因此如果有任何术语使用错误,我深表歉意)

我有一些javascript控制一个画布游戏,我有一个prolog计划者可以解决这个游戏。我现在正在尝试将两者连接起来,并建立了一个flask服务器,它可以成功地调用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
    }
  });
});
烧瓶服务器

//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

我已经看到了关于这一点的其他问题,事实上,我张贴的尝试是来自,但我一直得到400(错误的要求)。我猜从那以后瓶子就变了?我知道它正确地发送了json,因为如果我不尝试触摸它,我会在浏览器中看到成功消息,因此这纯粹是因为我无法访问它的字段或查找任何示例

您通过POST发送的不是JSON。它只是一对,因此你应该像那样发送它。并使用
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"})

您通过POST发送的不是JSON。它只是一对,因此你应该像那样发送它。并使用
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"})

非常感谢。工作起来很有魅力!非常感谢。工作起来很有魅力!