DNN环境下JS表单提交后无法跳转至目标页面问题求助
解决DNN环境中表单提交后不跳转的问题
首先看你的代码,有一个明显的语法错误导致表单无法正确创建和提交,另外还有几个可能影响跳转的点,我一步步帮你解决:
1. 修复表单字符串拼接的错误
你的postURL函数里,HTML字符串的拼接出现了问题——闭合的</form>被放在了加号外面,导致生成的表单元素不完整,浏览器无法识别为有效的表单,自然无法触发提交跳转。
2. 修正后的代码
我调整了代码的拼接逻辑,同时优化了表单提交的触发方式,避免可能的事件拦截:
function postURL(url) { // 把所有表单HTML拼接成完整的字符串 var formHtml = "<form action='" + url + "' method='post'>" + "<input type='hidden' name='CheckedData' value='" + JSON.stringify(CheckedArray) + "'/>" + "<input type='hidden' name='URL' value='CQLandingPage' />" + "</form>"; var form = $(formHtml); $('body').append(form); // 触发原生DOM元素的提交,避免jQuery事件绑定的拦截 form[0].submit(); // 提交后移除表单,清理页面 form.remove(); } function Checkout() { var CheckOutUrl = "https://www.facebook.com/"; postURL(CheckOutUrl); }
3. 额外注意事项
- 跨域提交限制:你要跳转的是外部域名,虽然表单POST跨域是允许的,但如果目标网站不接受外部提交的POST请求,可能会出现跳转失败或返回原页面的情况。如果只是需要跳转而不需要传递POST数据,可以直接用
window.location.href = CheckOutUrl;替代表单提交。 - DNN环境的特殊拦截:DNN可能自带一些表单验证或事件绑定脚本,可能会阻止表单的默认提交行为。用
form[0].submit()触发原生提交可以绕过这类jQuery绑定的拦截事件。 - 数据转义:如果
CheckedArray里包含特殊字符(比如引号),JSON.stringify后可能会破坏HTML结构,建议对值进行转义,比如用encodeURIComponent(JSON.stringify(CheckedArray))来避免这类问题。
内容的提问来源于stack exchange,提问作者Hardik Masalawala
相关产品推荐
相关产品推荐

