Javascript 使用XMLHTTPRequest从数据库中提取数据
我想在不刷新页面的情况下从数据库中提取一些数据。最好的方法是什么 我使用以下XMLHTTPRequest函数从Javascript 使用XMLHTTPRequest从数据库中提取数据,javascript,php,mysql,xmlhttprequest,Javascript,Php,Mysql,Xmlhttprequest,我想在不刷新页面的情况下从数据库中提取一些数据。最好的方法是什么 我使用以下XMLHTTPRequest函数从cart.php文件中获取一些数据(购物车项目)。此文件根据选项值执行各种功能。 例如:option=1表示获取所有购物车项目option=2表示删除所有购物车项目并返回字符串“您的购物车是空的。”。选项=3、4…等等 我的XHR函数: function getAllCartItems() { if(window.XMLHttpRequest)
cart.php
文件中获取一些数据(购物车项目)。此文件根据选项
值执行各种功能。
例如:option=1
表示获取所有购物车项目option=2
表示删除所有购物车项目并返回字符串“您的购物车是空的。”
。选项=3、4…等等
我的XHR函数:
function getAllCartItems()
{
if(window.XMLHttpRequest)
{
allCartItems = new XMLHttpRequest();
}
else
{
allCartItems=new ActiveXObject("Microsoft.XMLHTTP");
}
allCartItems.onreadystatechange=function()
{
if (allCartItems.readyState==4 && allCartItems.status==200)
{
document.getElementById("cartmain").innerHTML=allCartItems.responseText;
}
else if(allCartItems.readyState < 4)
{
//do nothing
}
}
var linktoexecute = "cart.php?option=1";
allCartItems.open("GET",linktoexecute,true);
allCartItems.send();
}
我的问题:
Ajax
是实现此目的的最佳选择
现在使用Ajax
发送和接收数据最好使用XML
。因此,我建议使用Web服务
。您可以使用SOAP/REST
web服务根据请求从数据库中获取数据
您可以使用它来了解更多关于Web服务的信息
对于教程,互联网上有足够多的文章。我不认为拒绝服务攻击是您主要关注的问题,这里。如果返回HTML,cart.php
,这种担心同样有效。不,通过AJAX公开公共API是非常常见的做法
不过,需要记住的一点是,通过同一个URL列出和删除项目都是模棱两可的。最好(至少)将这些操作(或“方法”)分离成不同的URL(例如:/cart/list
和/cart/clear
)
<>如果你愿意进一步发展,你应该考虑实施一个“API”。这意味着,除其他外,只能使用正确的HTTP谓词调用方法。你可能只听说过GET
和POST
,但还有PUT
和DELETE
等。这背后的原因是使方法幂等,这意味着它们一次又一次地做同样的事情,不管你调用它们多少次。例如,GET
调用/cart
将始终列出内容,DELETE
调用/cart
将始终删除购物车中的所有项目
虽然为您的购物车编写一个完整的RESTAPI可能并不实际,但我相信其中的一些原则可能会帮助您构建一个更健壮的系统
一些阅读材料:
XMLHttpRequest
对象,因此您不会刷新页面(它是AJAX),或者有些事情您没有告诉首先,您应该考虑分离应用程序的不同部分。拥有一个通用文件来执行与Cart相关的所有其他任务,这违反了各种软件设计原则
第二,第一个漏洞是SQL注入。您应该永远不要将输入连接到SQL 假设我发布了1;截断表车代码>。那么您的SQL将如下所示:
从cartid=1的购物车中选择itemid;截断表车
首先选择有问题的项目,然后破坏数据库
你应该这样写:
$item = $_COOKIE['cart'];
$item = preg_replace_all("['\"]", "\\$1", $item);
为了避免刷新,您可以在页面上放置链接。类似于,
就安全性而言,不管您的业务逻辑如何,引入一个只与您的数据相关的数据库层,然后添加一个依赖于数据库层的服务层,这将为执行业务层操作提供便利
您还应该注意@PPvG建议,并使用Apache的mod_rewrite或其他类似工具使URL更有意义
另一个注意事项:尝试用JSON或XML格式封装数据。我建议使用json_encode()服务器端的code>和JSON.parse()代码>在客户端。这将确保安全交付。说“最好使用XML实现AJAX”就像说“最好使用XML到处旅行”。当然,XML有它的用途。但有时,更简单的交换格式(如)是更好的选择。这完全取决于上下文。换句话说:如果你要去隔壁(10米:你应该步行)或地球的另一边(16.000公里:买机票),不要开车去。另外,应该注意的是,对于慢速连接,XML会占用大量带宽,而JSON要轻得多。你能澄清一下RESTful api与使用HTTP POST或GET相比如何减少我遭受拒绝服务攻击的漏洞吗?我问这个问题的原因是我已经实现了使用GET或POST的API,我一直在想如何使它们更安全。谢谢@曼尼什:他们没有,你确实使用了POST
和GET
。REST旨在使您的API不那么模棱两可(更加明确),并防止意外的副作用。如何保护您的API取决于您想要保护它的内容(即,您想要访问限制,还是保护它不受洪水的影响?)我已经实施了访问限制
$item = $_COOKIE['cart'];
$item = preg_replace_all("['\"]", "\\$1", $item);