2017-04-07 64 views
1

我在Flask中玩jQuery,并且一直在使用一个简单的例子,我在runnable上找到了将两个数字加起来的例子。flask jquery GET 404

我正在使用Flask-Appbuilder,并有一个视图所有安装程序来显示模板,它工作正常。我将jQuery代码添加到模板中,并显示它应该显示的内容。

在Flask端,我创建了View和视图中的函数来呈现模板并接收jQuery GET请求中的变量。

当我点击模板上的jQuery链接将两个数字加在一起时,我在python 控制台上看到404错误。

[07/Apr/2017 09:48:53] "GET /_add_numbers?a=1&b=1 HTTP/1.1" 404 - 

下面是我在我的模板

{% extends "appbuilder/base.html" %} 

{% block content %} 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
    <link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" 
      rel="stylesheet"> 
    <script type=text/javascript> 
    $(function() { 
     $('a#calculate').bind('click', function() { 
     $.getJSON('/_add_numbers', { 
      a: $('input[name="a"]').val(), 
      b: $('input[name="b"]').val() 
     }, function(data) { 
      $("#result").text(data.result); 
     }); 
     return false; 
     }); 
    }); 
    </script> 

    <body> 
    <div class="container"> 
     <div class="header"> 
     <h3 class="text-muted">How To Manage JSON Requests</h3> 
     </div> 
     <hr/> 
     <div> 
     <p> 
    <input type="text" size="5" name="a"> + 
    <input type="text" size="5" name="b"> = 
    <span id="result">?</span> 
    <p><a href="javascript:void();" id="calculate">calculate server side</a> 
     </form> 
     </div> 
    </div> 
    </body> 
</html> 
{% endblock %} 

烧瓶看法是这样的:

class MyView(BaseView): 
    default_view = 'sale' 

    @expose('/sale', methods=['GET']) 
    @has_access 
    def sale(self): 
     return self.render_template('sale.html') 

    @expose('/_add_numbers', methods=['GET', 'POST']) 
    @has_access 
    def add_numbers(self): 
     a = request.args.get('a', 0, type=int) 
     b = request.args.get('b', 0, type=int) 
     return jsonify(result=a + b) 

任何指导,将不胜感激。

GET截图 - https://imgur.com/a/0rxiN

帖子截图 - http://imgur.com/Ns1BEkE

+0

我从来没有使用过FAB,但会怀疑'@ has_access'装饰器会干扰某种方式。如果你删除它,它会工作吗? –

+0

当我点击链接 –

+0

时,我删除了它,并仍然在控制台中具有相同的404。就像我说的,我不了解FAB。如果您只是试验jQuery,那么使用标准Flask路由和视图可能会更容易。 –

回答

0

您正在使用的烧瓶的AppBuilder和syntax suggested是:

class MyView(BaseView): 
    route_base = "/myview" 

    @expose('/method1/<string:param1>') 
    def method1(self, param1): 
     # do something with param1 
     # and return it 
     return param1 

这会导致URL看起来像这样:http://<your_host>/myview/method1/<awaiting string param>

这可能会干扰您的网址。


有点更透彻的解释:

GET请求尝试找到其尽可能后端而言不符合任何暴露的URL /_add_numbers?a=1&b=1 URL。
你应该尝试定义你暴露网址如下:

@expose('/_add_numbers?<int:a>&<int:b>', methods=['GET', 'POST']) 

如果flask-appbuilder给你的问题,尝试实验默认瓶,看看是否适合你,然后用这些知识前进。


注:

通常,这是不是一个GETPOST请求。

您可以尝试一个简单的jquery $.post()呼叫,而不是getJSON

$.post('http://localhost:5000/_add_numbers',{ 
    a: $('input[name="a"]').val(), 
    b: $('input[name="b"]').val() 
}, function(data) { 
    $("#result").text(data.result); 
}); 

No 'Access-Control-Allow-Origin' header is present on the requested resource.错误已被提到,并在这些职位彻底回答:

+0

当我更改为POST时,则会在请求的资源上出现'No'Access-Control-Allow-Origin'标头。“屏幕截图 - http://imgur.com/a/cSehL –

+0

这里是控制台输出为GET - http://imgur.com/a/0rxiN –