首页 > 解决方案 > 如何使用 ajax 函数重定向到另一个页面,而无需将该页面回调到 ajax 函数参数目标 div?

问题描述

我正在使用 ajax 函数从视图上的文本字段上的用户获取注册密钥到控制器,应该发生的是,如果注册密钥有效,则应将用户重定向到另一个页面,允许他们正常使用应用程序. 执行重定向的控制器函数不会重定向到新页面,而是会在目标 div 中打开用户应重定向到的页面,该页面应显示错误代码消息。如果注册密钥按预期正确,我如何覆盖这种情况并能够将用户重定向到一个全新的页面,并且在需要时仍然能够在相关 div 中显示不正确的代码消息?

风景

<div id="code">
  <input id="regcode"  maxlength="10" type="text" class="field" name="regCode" autocomplete="off" onkeyup="ajax('product_key_entry', ['regCode'], 'regCodeTarget')" placeholder="Enter Product Key"/><br />
                <div id="regCodeTarget"></div>

控制器

def reg_key_entry():
    key_exists = not db(db.regKeys.regKey == request.vars.regCode).isempty()
    if key_exists:
        #A used reg key should get deleted so that it cant be used twice
        db(db.regKeys.regKey == request.vars.regCode).delete()
        redirect(URL('index'))
    else:
        return DIV("INCORRECT PRODUCT KEY", _id="regCodeTarget", _style="color: white; border: solid 1px red; width: 160px; background-color: red; font-weight: bold; padding: 3px; border-radius:5px;")

我希望实现的是让用户在输入正确的注册密钥时被重定向到新定义的页面,而不是现在当注册密钥正确时,他们应该被重定向到的页面被调用到目标 div在同一个页面中,他们应该被重定向!

标签: python-2.7web2py

解决方案


你可以做:

redirect(URL('index'), client_side=True)

使用client_side=True,而不是服务器返回 303 重定向响应,它返回一个特殊的标头,客户端 Javascript 处理重定向(通过更改window.location)。

请参阅http://web2py.com/books/default/chapter/29/04/the-core#HTTP-and-redirect


推荐阅读