我正在尝试编写一个C ++ CGI程序,该程序为多个页面提供jQuery Mobile响应。但是,似乎只处理了响应中的第一个(尝试过多个浏览器)。
为了简化,我使用Post创建了以下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-8\n\n");
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>\n\n");
printf("<body>\n\n");
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>\n\n");
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>\n\n");
printf("</body>\n");
printf("</html>\n");
return 0;
}
当我通过&#34; Post&#34;表单,我无法导航到page2,以及&#34;查看源&#34;在Safari中表示只处理了第一页的div。
有趣的是,如果我点击重新加载,它会使用&#34; get&#34;加载表单。并且两个页面都正确加载。
使用&#34; post&#34; CGI程序是否存在一些限制?从正确处理多个页面?
答案 0 :(得分:0)
这与CGI或POST请求无关 这是jQuery的工作。
如果您打开HTML页面,请打开开发工具并转到网络选项卡(在Safari:时间轴&gt;网络请求中),然后点击&#34;登录&#34;按钮,很明显jQuery将表单提交转换为XHR,将响应集成回当前页面并以某种方式破解浏览器栏中显示的URL。
之后,页面上的所有#
- 链接似乎都被破坏了,从而打破了依赖于此类链接的jQuery页面导航。
现在,我不知道为什么会发生这种情况,但这是修复它的一种方法:
告诉jQuery不要将表单提交转换为XHR
您可以将data-ajax="false"
添加到<form>
标记。