带有jQuery的CGI后表单未完全加载
CGI post form with jQuery not fully loaded
我正在尝试编写一个C++CGI程序,该程序可以用多个页面提供jQuery Mobile响应。然而,似乎只处理响应中的第一个(已经尝试了多个浏览器(。
为了简化,我用一个简单的表单创建了以下HTML页面,使用Post调用CGI程序:
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
<script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
</head>
<body>
<div data-role="page" id="login">
<div data-role="header">
<h1>Login</h1>
</div>
<div data-role="main" class="ui-content">
<form method="post" action="/cgi-bin/testForm">
<center>
<input type="submit" data-inline="true" value="Login">
</center>
</form>
</div>
<div data-role="footer">
</div>
</div>
</body>
</html>
testForm的C++代码是:
#include <cstdio>
int main(int argc,char**argv,char**environ) {
printf("Content-type: text/html; charset=utf-8nn");
printf("<html>n");
printf("<head>n");
printf("<meta name="viewport" content="width=device-width, initial-scale=1">n");
printf("<link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">n");
printf("<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>n");
printf("<script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>n");
printf("</head>nn");
printf("<body>nn");
printf("<div data-role="page" id="page1">n");
printf(" <div data-role="header">n");
printf(" <h1>Page1</h1>n");
printf(" </div>n");
printf(" <div data-role="main" class="ui-content">n");
printf(" <p>text</p>n");
printf(" </div>n");
printf(" <div data-role="footer">n");
printf(" <div data-role="navbar">n");
printf(" <ul>n");
printf(" <li><a href="#page1">Page1</a></li>n");
printf(" <li><a href="#page2">Page2</a></li>n");
printf(" </ul>n");
printf(" </div>n");
printf(" </div>n");
printf("</div>nn");
printf("<div data-role="page" id="page2">n");
printf(" <div data-role="header">n");
printf(" <h1>Page2</h1>n");
printf(" </div>n");
printf(" <div data-role="main" class="ui-content">n");
printf(" <p>text</p>n");
printf(" </div>n");
printf(" <div data-role="footer">n");
printf(" <div data-role="navbar">n");
printf(" <ul>n");
printf(" <li><a href="#page1">Page1</a></li>n");
printf(" <li><a href="#page2">Page2</a></li>n");
printf(" </ul>n");
printf(" </div>n");
printf(" </div>n");
printf("</div>nn");
printf("</body>n");
printf("</html>n");
return 0;
}
当我通过"Post"表单运行此操作时,我无法导航到page2,Safari中的"view source"表示只处理了第一个页面的div。
有趣的是,如果我点击重载,它会使用"get"加载表单,并且两个页面都被正确加载。
使用"post"的CGI程序在正确处理多个页面方面是否存在一些限制?
这与CGI或POST请求无关
这是jQuery在做的。
如果你打开你的HTML页面,打开开发工具,转到网络选项卡(在Safari:时间线>网络请求中(,然后点击"登录"按钮,很明显,jQuery将表单提交转换为XHR,将响应集成回当前页面,并以某种方式破解浏览器栏中显示的URL
之后,页面上的所有#
-链接似乎都被破坏了,从而也破坏了jQuery的页面导航,而jQuery依赖于这些链接。
现在,我不知道为什么会发生这种情况,但有一种解决方法:
告诉jQuery不要将表单提交转换为XHR
您可以通过将data-ajax="false"
添加到<form>
标记中来完成此操作。
相关文章:
- C++单例,不会为此文档加载任何符号
- 强制资源管理器重新加载注册表值
- 从文本文件加载链表并打印时无限循环
- SqlDataAdapter 未加载数据表 - C++
- 如何从QtQuickWidget加载qt快速UI表单
- 如何将项目共享"system calls"作为单例对象构建和链接到引导加载程序?
- 使用 C++ 和嵌入式单声道调用 C# DLL 时无法加载程序集系统
- 运行时动态加载和单例
- C++简体版链表,当我加载数据以创建链表并输入更多数据时,似乎存在差距
- 如何将数据文件加载到自动Excel工作表文档
- 断开命名管道(在加载表上)上的 SybaseIQ 问题
- Qt全局样式表加载
- 如何修改运行时加载DLL的导入地址表
- 如何使用LuaBridge从文件加载表?[Lua来自C++]
- C++懒惰的单例挂在加载时
- 正在将具有多个值的XML属性加载到不同的表单元格中
- 如何从流中加载html内容,然后如何创建样式表以在预览窗格中显示html文件(如html预览处理程序)
- 在Qt中加载外部样式表
- 生成表单和加载时代码中出现Lambda错误
- 带有jQuery的CGI后表单未完全加载