ajax调用有时会从POST更改为GET

时间:2017-03-21 14:54:54

标签: php jquery ajax

我有一个基于用户选择的ajax调用页面。在某些情况下,虽然它被指定为POST,但它会变为GET;结果,被调用页面中的代码失败。

编辑:虽然$ _SERVER ['REQUEST_METHOD']告诉我它是一个GET,但在响应页面中,$ _GET变量是空的,就像$ _POST变量一样。 (我希望我可以通过从$ _GET中获取参数来解决这个问题。)

以下是ajax调用的相关部分:

var filters = getFilters();
var fnargs = "GetArticles|" + filters ;

$.ajax({
    url: 'retrievedata.php',
    type: "POST",
    async:true,
    data: {"functionname":"getpapers", "arguments":fnargs},
    dataType: "JSON",

接下来是成功和错误部分。

getFilters函数构建一个逗号分隔的字符串,其中包含3个较短的字符串。他们中的任何一个或全部都可以是空的。填充时,每个都是以逗号分隔的整数列表。以下是一些例子:

'1','3,6','2015'
'','',''
'1','',''

在每种情况下,Firefox Web控制台的“网络”选项卡都会向我显示已为呼叫组装了正确的参数,并且就此而言,它是一个POST。但我在retrieveata.php(被调用的页面)中添加了$ _SERVER ['REQUEST_METHOD']的检查,我发现有些时候,POST已成为GET。

这种情况始终如一,因为相同的getFilters结果始终以相同的方式处理。但除此之外,我能找到的唯一一致性是,如果第三个字符串被填充,它总是有效。以下是一些有效的案例:

'','','1998'
'','','1998,2008'
'','1',''
'','2,1',''
'','2',''
'1','','1999'
'1','1','1999'
'1','1',''
'1,3','1',''
'3','',''

以下是改为GET的地方:

'','',''
'','3,1',''
'','2,3',''
'','3',''
'1','',''
'1,3','',''

可能应该注意我在ajax call: Sometimes, _POST is empty发布了原始问题。感谢那里的评论者,我发现改变GET是关键问题。

另外,值得补充的是,我的另一个页面具有几乎相同的调用,除了它的getFilters版本仅连接两个以逗号分隔的字符串(并且fnargs的第一个组件是“GetPapers”而不是“GetArticles”。该页面总能做出正确的电话。

1 个答案:

答案 0 :(得分:0)

事实证明,出现从POST切换到GET的症状是红色鲱鱼(可能是由于错误处理程序代码中的问题)。这里真正的问题是一些数据回来了json_encode()无法处理的字符。将数据库连接设置为UTF-8可以修复它。