gpt4 book ai didi

javascript - 为什么 C++ CGI form_iterator 值没有进入 XMLHttpRequest 异步 Ajax 请求?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:45:28 25 4
gpt4 key购买 nike

我用 Ajax 脚本编写了一个示例 HTML 页面。我在 cpp 中有一个 .cgi 文件,它将接受来自 ajax 的值并将消息发送回 HTML 页面。现在我面临的问题是我没有在 cgi 脚本中获取值。这是我的代码:

HTML & ajax脚本:

<html>
<head>

<script type = "text/javascript">

var XMLHttp;

if(navigator.appName == "Microsoft Internet Explorer") {

XMLHttp = new ActiveXObject("Microsoft.XMLHTTP");

} else {
XMLHttp = new XMLHttpRequest();
}

function SentData () {

var name = document.getElementById('name').value ;
var postData;

XMLHttp.open("POST", "simplecgi.cgi", true);

postData = "";
postData += name;

XMLHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
XMLHttp.setRequestHeader("Content-length", postData.length);

XMLHttp.send(postData);

XMLHttp.onreadystatechange = function() {
document.getElementById('area').innerHTML = XMLHttp.responseText;

}

}
</script>

<h1>Simple application</h1>

<form id="newform">
Enter Name <input onkeyup = "javascript: SentData()" name ="name" id="name">
</form>

<div id = "area">
</div>

</body>
</html>

在这里SentData函数获取 textarea值并附加 postdata并通过 XMLHttpRequest 发送.

cpp cgi脚本:

include <unistd.h>
#include <iostream>
#include <vector>
#include <string>

#include "cgicc/Cgicc.h"
#include "cgicc/HTTPHTMLHeader.h"
#include "cgicc/HTMLClasses.h"

#include <stdio.h>
#include <string.h>

using namespace std;
using namespace cgicc;

int main(int argc, char **argv)
{

Cgicc cgi;

try {
// Send HTTP header
cout << HTTPHTMLHeader() << endl;
// Set up the HTML document
cout << html() << head(title("cgi sample")) << endl;
cout << body() << endl;

form_iterator name = cgi.getElement("name");

if( name != cgi.getElements().end()){

cout << "Content-Type: text/plain\n\n"<< **name << "sucess"<<endl;
cout << body() << html();

}
catch(exception& e) { }

return 0 ;

}

在这里,我想获取 HTML 文本区域值,然后将该值与成功消息一起发送回 HTML。

我现在面临的问题是我没有得到 form_iterator name = cgi.getElement("name");值(value) 。这是空的?为什么 ?

但是当我使用 like 时它工作正常

<form id="newform" action="simplecgi.cgi" method="POST">
Enter Name <input onkeyup = "javascript: SentData()" name ="name" id="name">
</form>

我不想将我的 HTML 页面重定向到 .cgi 页面。为此,我正在使用 ajax 。为什么这个错误?有什么建议 ?

如果我没有使用 <form >就像一个没有 form 标签的文本区域。我可以将此 textarea 值传递给 .cgi 并将消息返回到 HTML 吗?

最佳答案

application/x-www-form-urlencoded 内容,根据定义,必须使用此约定进行编码。

您的 javascript 代码似乎盲目地将裸字符串值放入 POST 的正文中。这不是 application/x-www-form-urlencoded 格式。

格式,粗略地总结,是一个“名称=值”对的列表,由&符号分隔,每个都像URL中一样进行%编码,因此“urlencoded”。您的 javascript 代码仅发送 value 部分,并且无法对它进行 %-encode 。

修复您的 javascript,以便正确编码 POST 内容。一般来说,使用任何一个免费提供的 Javascript 库(如 Jquery)为您完成所有工作都会容易得多,而不是自己重新发明轮子。

关于javascript - 为什么 C++ CGI form_iterator 值没有进入 XMLHttpRequest 异步 Ajax 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39637152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com