2009-11-26 229 views
0

我使用ExtJS的发出一个Ajax请求到服务器上的PHP页面,想要发送的参数POST变量,而不是在查询字符串。URL请求添加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

哪些浏览你的Vista和Ubuntu的机器上使用? – 2009-11-27 05:42:05

+0

代码在Adobe Air内运行,加载JS代码并将请求发送到同一台服务器。用于连接到不同服务器的Adobe Air客户端完全相同。 – 2009-11-27 06:04:38

回答

1

尝试把所有的PARAMS进入后。你不应该缓存有任何问题,因为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中留下逗号时适合。

+0

我基本上正在尝试这样做,你在这里列出的第一种方式。不使用GET的原因是,当使用SSL时,我希望数据受保护,如果它位于查询字符串中,那么它将不会被保护。 更令我困惑的是,为什么服务器表现得如此奇怪。 – 2009-12-01 06:05:05

+0

确保您将所有参数都放入POST中。查询字符串中没有(“ajax.php”没有“?”)。这应该适用于所有浏览器。如果它不起作用,请发布您的extjs代码和显示GET或POST的HTTP流量。 – 2009-12-01 15:29:44

相关问题