是的,这取决于你!
首先感谢使用本机XMLHttpRequest,所有浏览器都支持,包括移动浏览器。使用 jQuery 的 ajax 只是性能损失。
安全
当谈到 javascript 时,没有安全性。零。
前段时间我回答了一个关于How can I obfuscate(protect) JavaScript? 的问题……而且一旦你把它放到网上,真的没有什么可以隐藏的。你唯一能做的就是惹恼“黑客”。此外,仅使用本机 XMLHttpRequest 会增加所有 jQuery 粉丝不理解您所做的事情的机会! ;)
在上面的帖子中,我使用标题来验证引荐来源...
性能
XMLHttpRequest它是原生的...所以它是最快的方法..
所有其他库包括许多简化一切的用户友好检查。许多检查意味着性能损失。
由于您可能希望将 ajax 用于不止一项操作,我建议您查看我前段时间编写的函数。
How do I return the response from an asynchronous call?
function ajax(a,b,e,d,c){ // Url,callback,method,formdata or {key:val},placeholder
c=new XMLHttpRequest;
c.open(e||'get',a);
c.onload=b;
c.send(d||null)
}
我将它用于各种 REST API。大多数情况下,您不需要设置标题和其他内容。
您可以对其进行修改并添加对添加标题信息的支持。
我在你的代码中看到了一个非常糟糕的地方。
request.open('GET', 'controllers/get_date.php', true);
真的???
不要这样做。那不应该被使用。甚至没有静态文件。 Ajax 本来就是异步!如果 php 文件的响应不够快,您将导致用户浏览器崩溃。通过崩溃,我的意思是浏览器卡住了,直到加载了 ajax 内容。所以如果加载文件需要 5 秒,那么 5 秒你什么也做不了。鼠标/触摸事件不起作用,每个动画元素都将被冻结。gifs/videos/cssstyles。
如何发送参数
安全性略高...短参数,最佳性能??是的,使用headers 标头在其他任何东西之前发送。但实际上我认为没有太大变化,因为最终的二进制数据可能与您通过GET 和POST 发送它的大小相同。
GET 或 POST?
如果最后获得的发送标头的安全性还不够,因此您想以“正常”方式进行,那么只需考虑一件重要的事情:您需要发送多少数据。我更喜欢 post.. 它允许发送更多数据。我使用FormData 这样做。
var fd=new FormData(form);// this is the whole form including upload files.
ajax(url,callback,'post',fd);
JSON 似乎不太明显。
我看不到任何地方提到 JSON。没有 JSON 的 Ajax 是没用的。没有 json 的 js & php 是没用的。你不能只发送字符串......所以
php
//php array to jsonstring
json_encode($array);
//jsonstring to php array
json_decode($string);
js
//jsonstring to js array
JSON.parse(string);
//js array to jsonstring
JSON.stringify(array);
在这两种情况下(如果服务器 nginx、apache、lighthttp 设置正确),您无需担心编码。 JSON 自动编码为utf8。
PHP
有些人可能会建议压缩 php(ajax 可以处理压缩文件),甚至添加正确的 mimetype。
//header('Content-Type: application/json'); // not needed
echo json_encode($data);
但在这两种情况下都需要更多时间。 所以不要。
保持 php 文件尽可能简单。因为它需要更多时间。
不要发送元素、样式或其他 html 相关内容。你应该做客户端。保持服务器敏捷。
mysql转json
https://stackoverflow.com/a/20948686/2450730
现在,看看 cmets,您使用的是 NODEJS :)。
使用 webSockets。 将它用于一切。
忘记 ajax,用 websockets 做所有事情!!!!双向通信。您只发送所需的数据。没有请求,没有标头……没有慢的东西。
支持
旧版浏览器不支持 ajax 和 websockets 以及服务器发送的事件。
如果这是个问题,请不要使用这些技术。同样使用jQuery在ie6上允许ajax只是一个笑话......
顺便说一句,现在 ff,即,opera、android、safari、ios 甚至这些浏览器的 4-5 年旧版本都支持 ajax、websockets 和 SSE
网络套接字
我真的很喜欢 php, mysql nginx apache...但是 nodejs, websockets & json ..
这很有趣。
简单的js例子。
var ws=new WebSocket('ws://YOURIP:YOURPORT');
ws.onopen=function(){ //those events are also aviable with sse
ws.send('WS open!');//sending data to the server
// server handles each user individually very easely.
};
ws.onclose=function(){
console.log('WS closed!');
};*/
ws.onmessage=function(e){
//USE JSON
var Everythingyouneed=JSON.parse(e.data);
};
@nodejs 端....
https://github.com/websockets/ws
查看broadcast 或单独将数据发送给每个用户。