Cherrypy диспетчерская
Я пытаюсь запустить простой метод python из сценария jquery.
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 ответа
Попробуйте обновить ваш JavaScript к этому...
$.ajax({
type: "POST",
url: "/plugins/set_prop/submitted",
data: commit,
success: function(data) {
alert(data["title"]);
$("#status").html(data["title"]);
}
Надеюсь это поможет. Эндрю
Когда вы используете только 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}
РЕДАКТИРОВАТЬ: Кажется, вы делаете запрос POST с просто DATA установлен в True или False. Итак, Вишневый не понимает, какой параметр вы хотите дать. Попробуйте изменить код на:
$.ajax({
type: "POST",
url: "submitted",
data: {commit: commit},
success: function(data) {
alert(data["title"]);
$("#status").html(data["title"]);
}
});
(Смотрите также: jQuery ajax post data)