Cherrypy调度

时间:2012-11-10 15:37:36

标签: jquery python cherrypy

我正在尝试从jquery脚本运行一个简单的后端python方法。

JQUERY

$(document).ready(function(){
    $('#btn').click(function(event){
    event.preventDefault();
    var commit = $("#test_form input[type='radio']:checked").val();
    alert(commit);
          $.ajax({
                type: "POST",
                url: "submitted",
                data: commit,
                success: function(data) {
                    alert(data["title"]);
                    $("#status").html(data["title"]);
                }
          });
     return false;
    });

    $('#update_help').click(function() {
        $('#update_info').toggle('slow', function() {
        // Animation complete.
        });
    });
});

在我的樱桃python脚本中,我有以下

@cherrypy.expose
def submitted(self, commit = 0):
    cherrypy.response.headers['Content-Type'] = 'application/json'
    print"Got here"
    #return simplejson.dumps(dict(title="hello", success=True))
    return "foo"

HTML文件如下所示

<form  id="test_form" method="post">

    <li class = "option">
            <input type="radio" name="commit" value = "0"/> Option 1
        </li>
        <li>
            Option 1

        </li>
        <li class = "option">
                <input type="radio" name="commit" value = "1"/> Option 2 <br>
        </li>
        <li class = "option">
            <input id="btn" type="submit"/>
        </li>
    </ul>        
        </form>

我注意到ajax帖子从未真正找到“提交”功能。整个页面重新加载,并且没有任何东西返回到ajax post回调。我确信这与我在调度错误方面有关,但我错过了什么?

由于

2 个答案:

答案 0 :(得分:0)

尝试将您的javascript更新为此...

      $.ajax({
            type: "POST",
            url: "/plugins/set_prop/submitted",
            data: commit,
            success: function(data) {
                alert(data["title"]);
                $("#status").html(data["title"]);
            }

希望这会有所帮助。 安德鲁

答案 1 :(得分:0)

当您仅使用submitted作为目标链接时,它将与打开的html文件相关。这意味着当您的html文件位于/plugins/set_prop/时,它应该是正确的。

但是关于您提交的处理程序的表示法: 你没有这个“真正的”json。 尝试将您的代码更改为:

@cherrypy.expose
@cherrypy.tools.json_out()
def submitted(self, commit = 0):
    print("Got here")
    return {"title": "hello", "success": True}

编辑: 您似乎只在DATA设置为True或False时发出POST请求。所以cherrypy不明白你想要给哪个参数。尝试将代码更改为:

$.ajax({
    type: "POST",
    url: "submitted",
    data: {commit: commit},
    success: function(data) {
        alert(data["title"]);
        $("#status").html(data["title"]);
    }
});

(另见:jQuery ajax post data