【发布时间】:2014-06-26 21:26:30
【问题描述】:
我遇到了 Python Bottle 和 jQuery AJAX 函数的问题。现在,当我尝试在按钮提交调用(通过jQuery.submit() 函数)之后使用 AJAX 调用时,传回的数据是整个 HTML 文本。
在 Bottle 方面,我的代码如下所示:
@route('/testing')
@view('test.tpl')
def test():
myDict = request.query.decode()
data = 100
a = 1
b = 2
c = []
if myDict:
c.append(myDict['var1'])
c.append(myDict['var2'])
return json.dumps(c)
return locals()
在 JS 方面,我的代码如下所示:
$('#buttonSubmit').submit(function(d) {
e.preventDefault();
$.ajax({
type: 'GET', // I get that this is redundant
// dataType: 'json',
url: '/testing?var1=test1&var2=test2',
success: function(data) { console.log(data); }
});
});
在 HTML 方面,我的代码如下所示:
<form id='buttonSubmit'>
<button type='submit'>Go</button>
</form>
我的假设是,当我单击按钮时,它会进行 AJAX 调用,该调用通过 Bottle 接口进入 Python 文件。在这个 .py 文件中,它会调用test() 并返回一个本地值的字典(通过locals())。但是,当我登录到控制台时,传回的“数据”对象是整个 HTML 文件(包括标签)。
我的问题是:为什么会这样?我发现 jqXHR 对象的 responseText 与提供给成功函数回调的数据相匹配。
编辑:
让我解释一下这个的一般流程。我首先加载/testing 页面。这样做后,test.tpl 模板文件渲染良好,Python 文件返回 locals() 字典。但是,在加载此页面后,当触发 AJAX 调用时,我让它通过查询转到相同的 test() Bottle 方法。为了响应这个 AJAX 查询,locals() 仍然会返回相同的数据,但是将返回给 JS 的数据(属于 success 回调函数的数据)现在将是整个 HTML 文本,而不是一本字典。
但是,如果我要更改它并有一个单独的返回(即return json.dumps(c)),那么注册的数据将是一个 JSON 文件(一旦我添加了dataType='json' 部分。所以我想这就是我的困惑. 导致这个结果的 AJAX 有什么不同?
【问题讨论】:
标签: jquery python ajax bottle locals