是使用什么之间的差:

 $.ajax({
  type: 'POST',
  url: Drupal.settings.basePath + 'module/get/' + node,
  dataType: 'json',
  data: { 'ajax' : true }
 });

 $.ajax({
  type: 'POST',
  url: Drupal.settings.basePath + 'module/get',
  dataType: 'json',
  data: { 'ajax' : true, 'node' : node }
 });

在所述第一情况下,你访问节点变量作为回调函数和在你与$ _POST [“节点”]右访问所述第二情况下的参数?岂不第二种方法总是更好,但我看到很多人在做它的第一种方式。不是说第二个方式是安全的要么。仍然在寻找到形式令牌,而是试图找出这个基本比特第一

也想知道的情况下1,假设这AJAX是通过一个按钮触发,你怎么直接进入网址停止的人,mysite的/模块/ GET / 20和激活呢?难道只是检查$ _ POST [“AJAX”] ==真正做到这一点?或者是有还是一个安全漏洞存在?

有帮助吗?

解决方案

是在第一视线没有真正的差:

假设你的“节点”变量只是一个节点ID,没有两者之间太大的区别。在语义上,似乎都执行“GET”操作(即使他们在技术上post请求),因为他们只是检索数据,而无需改变服务器上的任何状态(好吧,这是另一种假设)。

安全明智的,没有相关的差异或者 - 既可以“伪造的”易和差归结为相同的,与“标准” GET与POST的争论,即,除了第一自曝没有差别参数一丁点儿更多的“可访问”的不经意的观察者,因为它们是在简单的视域的URL之内。

<强>可是内的Drupal一个 '方便' 差:

在Drupal的,第一个版本是经常遇到的,因为它可以利用通配符装载机参数的功能(在Drupal 6引入)。比方说,在hook_menu喜欢让你的回调URL定义:

$items['module/get/%node'] = array(
'title' => 'Foo',
'type' => MENU_CALLBACK,
'page callback' => 'yourModule_callback',
'page arguments' => array(2),
);

由此,yourModule_callback()将其第一个参数已经被用于在NID传递满载节点obect被调用,如%node告诉Drupal的对参数执行node_load()移交给回调函数之前。使用实施例的第二个版本,回调函数将必须加载节点对象本身,从POST数据中提取它之后。

因此,这里便利的事情。

此外,内Drupal的一个共同的模式是使用相同的回调URL为一个AJAX请求,作为其非JavaScript的“回退”替代。因此,被调用yourModule_callback()时,可以做任何它的目的是做与节点传递的第一,基本上组装它的结果。之后做到这一点,它只是为POST数据中$ajax == TRUE检查。如果它的存在,它知道结果是为AJAX请求,所以它可能输出的结果作为一个JSON。如果它不存在,它知道一个完整的页面周期是怎么回事,并可以相应地调整其输出(例如重建形式,再生一整页,无论...)。

这样的话,你就不必为您的非AJAX / AJAX回调注册不同的URL。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top