我正在使用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数据放入查询字符串。
我甚至不知道从哪里开始寻找造成这种情况的原因。它是网络上的代理或其他东西,还是登台服务器上的设置?
答案 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中留下尾随逗号时适合。