ajax调用有时会从POST更改为GET
我有一个基于用户选择的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调用时发布了原始问题:有时,_POST为空 。 感谢那里的评论者,我发现改变GET是关键问题。
此外,值得补充的是,我有另一个页面具有几乎相同的调用,除了它的getFilters版本仅连接两个逗号分隔的字符串(并且fnargs的第一个组件是“GetPapers”而不是“GetArticles”。该页面总是使正确的电话。
事实certificate,出现从POST切换到GET的症状是红色鲱鱼(可能是由于error handling程序代码中的问题)。 这里真正的问题是一些数据回来了json_encode()无法处理的字符。 将数据库连接设置为UTF-8可以修复它。