URL请求将POST数据添加到查询字符串

时间:2009-11-26 07:33:20

标签: ajax post extjs query-string zend-server

我正在使用ExtJS将Ajax请求发送到服务器上的PHP页面,希望将参数作为POST变量而不是查询字符串发送。

我在查询字符串中包含了一个随机令牌,因为我们在其中一个代理服务器上遇到了缓存问题。

Ext.Ajax.request({
url: 'ajax.php?action=test&randToken=' + generateRandomToken(),
scope: this,
method: 'POST',
success: ajaxSuccess,
failure: ajaxFailure,
params:
{
    param1: 'test',
    param2: 'data',
}});

上面的代码在我本地运行时(在Vista盒子上),并使用Fiddler检查流量一切正常。

然而,当在我们的Ubuntu登台服务器(运行Zend服务器)上运行时,所有ajax请求也将POST数据放入查询字符串。

我甚至不知道从哪里开始寻找造成这种情况的原因。它是网络上的代理或其他东西,还是登台服务器上的设置?

1 个答案:

答案 0 :(得分:1)

尝试将所有参数放入POST。您不应该在缓存方面遇到任何问题,因为POST不应该被缓存。

Ext.Ajax.request({
  url: 'ajax.php',
  scope: this,
  method: 'POST',
  success: ajaxSuccess,
  failure: ajaxFailure,
  params: {
    action: 'test',
    param1: 'test',
    param2: 'data'
  }
});

还尝试将查询字符串上的所有参数传递为GET。如果您担心安全性,请注意POST和GET都是通过HTTP传递的,并且如果流量未使用SSL加密,则很容易被嗅探。

Ext.Ajax.request({
  url: 'ajax.php?' + 
    Ext.urlEncode({
      action: 'test',
      randToken: generateRandomToken(),
      param1: 'test',
      param2: 'data'
    }),
  scope: this,
  method: 'GET',
  success: ajaxSuccess,
  failure: ajaxFailure
});

最后,尝试从params哈希中删除该尾随逗号。有些浏览器(IE)在js中留下尾随逗号时适合。