预期行为
01 - 使用jQuery发布表单 02 - 处理授权 03 - 执行MongoDB查询 04 - 应返回结果以代替表格。
实际行为
步骤1 - 3完成,但步骤4没有;正在返回正确的结果但是在空白页面中。
表格
<form name="login" id="login">
<p>username</p>
<p>password</p>
<input type="text" name="username" />
<input type="password" name="password" />
<button type="submit">login</button>
</form>
的jQuery
<script>
$(document).ready(function() {
$('#login').submit(function(e) {
e.preventDefault();
$.ajax({
type: 'POST',
url: '/login',
data: $(this).serialize(),
dataType: 'json',
success: function(results) {
$("#content_area").html("");
$("#content_area").append(results.content);
}
});
});
});
</script>
的Python
@post('/login')
def login():
"""Authenticate users"""
username = post_get('username')
password = post_get('password')
aaa.login(username, password, fail_redirect='/login')
dbname = 'mydb'
connection = pymongo.MongoClient(os.environ['OPENSHIFT_MONGODB_DB_URL'])
db = connection[dbname]
collection = db.myCollection
href = 'my-title'
query = {'title':href}
projection = {'_id':0,'content':1}
cursor = collection.find_one(query,projection)
response.content_type = 'application/json'
return dumps(cursor)
答案 0 :(得分:1)
替换它:
response.content_type = 'application/json'
用这个:
response.set_header('Content-type', 'application/json')
(只是一个猜测。)
答案 1 :(得分:0)
<强>解决方案:强>
登录表单页面的内容(即<form>
而非html <head>
)由getJSON()加载。
长话短说,我想:
如果jQuery由于内容没有正确加载怎么办? 通过getJSON()加载?
所以我改变了jQuery脚本以使用.on
即:
<script>
$(document).on("submit","#login", function (e) {
e.preventDefault();
$.ajax({
type: 'POST',
url: '/login',
data: $(this).serialize(),
dataType: 'json',
success: function(results) {
$("#content_area").html("");
$("#content_area").append(results.content);
}
});
});
</script>
现在它在指定的div中正确加载。
答案 2 :(得分:0)
在ajax请求期间进行document.write()
调用时会出现此问题。