jQuery ajax POST返回结果为空白页面

时间:2013-11-20 06:01:11

标签: jquery ajax mongodb python-2.7 bottle

预期行为

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)

3 个答案:

答案 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()调用时会出现此问题。