没有完全加载jQuery的CGI帖子表单

时间:2015-07-05 07:56:14

标签: jquery c++

我正在尝试编写一个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程序是否存在一些限制?从正确处理多个页面?

1 个答案:

答案 0 :(得分:0)

这与CGI或POST请求无关 这是jQuery的工作。

如果您打开HTML页面,请打开开发工具并转到网络选项卡(在Safari:时间轴&gt;网络请求中),然后点击&#34;登录&#34;按钮,很明显jQuery将表单提交转换为XHR,将响应集成回当前页面并以某种方式破解浏览器栏中显示的URL。
之后,页面上的所有# - 链接似乎都被破坏了,从而打破了依赖于此类链接的jQuery页面导航。

现在,我不知道为什么会发生这种情况,但这是修复它的一种方法:

告诉jQuery不要将表单提交转换为XHR 您可以将data-ajax="false"添加到<form>标记。