如何采用ajax来进行boa服务器下的异步通信
这篇文章给大家分享的是有关如何采用ajax来进行boa服务器下的异步通信的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
主要实现及踩过的坑如下:
1. get 还是 post请求:怎么发请求参见W3School上的ajax教程
推荐一般人没有前端基础的人使用get请求,因为只需要在请求的参数做一个字符串拼接就可以完成基本的ajax请求,具体实现可以参照一下这个网址(http://blog.csdn.net/huguohu2006/article/details/7755107),接下来重点讲一下post请求,优势这里我就不多讲了,前面的教程里面都有,主要讲一下实现方式:
function sender(url, data) {var xhr = createXHR();if (xhr) {xhr.onreadystatechange = function() {if (xhr.readyState == 4 && xhr.status == 200) {console.log(xhr.responseText);console.log(xhr.responseText.toString());var returnValue = xhr.responseText.toString();console.log(returnValue);return returnValue;// firefox下xhr.responseText作为返回值失效的问题// ie可以利用return来得到值。但firefox则不能,只能在readyState == 4 && status == 200时处理一个函数// 这个函数应当作为一个参数传递入函数。有个奇怪现象你如果去除红线部分的注释,firefox又可以取到值。// 估计是firefox使用ajax取值有个延时造成。//return xhr.responseText.toString();}};xhr.open("post", url, true);// send(string) 仅适用于post请求xhr.send(data);} else {//XMLHttpRequest对象创建失败alert("浏览器不支持,请更换浏览器!");}}
利用调用sender函数来实现ajax,函数的两个参数分别是请求的url和要发送的数据,注意post请求只能发送string类型的数据。如果要发送其他类型的数据建议采用jquery封装的ajax方法,这里之所以采用原生的ajax方法来发送数据主要有以下几个原因:
•jquery库的体积比较大,有可能mount进开发箱上的linux系统时出现失败的情况,这种情况可以通过mount u盘的方式解决 mount u盘的命令如下: mount -r /dev/uba4 /web -r为mount进文件的读写权限,具体可执行搜索查询,uba4为U盘在linux系统上显示的名字,web为目标文件夹,使用U盘挂载的缺点在于整个U盘的文件会全部被复制到目标文件夹中,有点缀余
•发送的数据不很多,也没有其他的类型要求,使用string类型完全可以满足开发需求,没必要引入jquery库增加项目空间
•原生的ajax可以更好地解释http请求的原理
下面再介绍一下cgi文件对http请求的处理,示例函如下:
#include#include #include char* get_cgi_data(FILE* fp, char* method){char* input;int len;int size=1024;int i=0;if (strcmp(method, "GET") == 0) /**< GET method */{input = getenv("QUERY_STRING");return input;}else if (strcmp(method, "POST") == 0) /**< POST method */{len = atoi(getenv("CONTENT_LENGTH"));input = (char*)malloc(sizeof(char) * (size+1));if (len == 0){input[0] = '\0';return input;}while (1){input[i] = (char)fgetc(fp);if (i == size){input[i+1] = '\0';return input;}--len;if (feof(fp) || (!(len))){i++;input[i] = '\0';return input;}i++;}}return NULL;}int main(void){char* input;char* method;char name[64];char passwd[64];int i=0;int j=0;printf("Content-type:text/html\n\n");printf("The following is query result:");method = getenv("REQUEST_METHOD");input = get_cgi_data(stdin, method);printf("string is: %s", input);return 0;}
上面包含了c语言处理两种请求的方法,get请求比较简单,直接使用getenv("QUERY_STRING")就可以获取到请求发送的数据,post请求的处理则比较负责,先获取请求内容长度,然后根据长度来动态分配一个等长的字符串空间,将发送的数据传给字符串,然后再根据自己项目的需要进行相应的处理即可。
感谢各位的阅读!关于"如何采用ajax来进行boa服务器下的异步通信"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!