Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ajax调用有时会从POST更改为GET_Php_Jquery_Ajax - Fatal编程技术网

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

Php ajax调用有时会从POST更改为GET,php,jquery,ajax,Php,Jquery,Ajax,我有一个基于用户选择的ajax调用页面。在某些情况下,虽然它被指定为POST,但它会被更改为GET;结果,被调用页中的代码失败 编辑:尽管$\u SERVER['REQUEST\u METHOD']告诉我这是一个GET,但在响应页面中,$\u GET变量是空的,就像$\u POST变量一样。(我希望我可以通过从$u GET获取参数来解决这个问题。) 以下是ajax调用的相关部分: var filters = getFilters(); var fnargs = "GetArticles|" +

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

编辑:尽管$\u SERVER['REQUEST\u METHOD']告诉我这是一个GET,但在响应页面中,$\u GET变量是空的,就像$\u POST变量一样。(我希望我可以通过从$u 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控制台的网络选项卡都会向我显示,已经为调用组装了正确的参数,因此,这是一篇文章。但是我在retrievedata.php(被调用的页面)中添加了一个对$_SERVER['REQUEST_METHOD']的检查,我发现有些时候,这篇文章已经变成了一个GET

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

'','','1998'
'','','1998,2008'
'','1',''
'','2,1',''
'','2',''
'1','','1999'
'1','1','1999'
'1','1',''
'1,3','1',''
'3','',''
以下是一些it更改以获得的信息:

'','',''
'','3,1',''
'','2,3',''
'','3',''
'1','',''
'1,3','',''
可能应该注意,我将原始问题发布在。多亏了那里的一位评论者,我才发现要获得的改变才是关键


另外,值得一提的是,我还有一个页面具有几乎相同的调用,只是它的getFilters版本只连接两个逗号分隔的字符串(fnargs的第一个组件是“GetPapers”而不是“GetArticles”)。该页面总是做出正确的调用。

事实证明,从POST切换到GET的现象是一种误导(可能是由于错误处理程序代码中的问题)。这里真正的问题是,一些数据返回时带有json_encode()的字符无法处理。将数据库连接设置为UTF-8修复了此问题。

如果您查看的是网络选项卡,它是一篇文章,但服务器说它是get,这是服务器端/网络问题。请联系我的主机(GoDaddy)他们正在挖掘,看看这是否是他们这边的事情。GoDaddy说他们帮不了忙。建议我查看服务器日志。在这些日志中,我在失败的案例中看到错误500.0,这似乎是“发生了模块或ISAPI错误”他们还建议我应该从MSSQL/Windows迁移到MySQL/Linux。想法?非托管服务器,对吗?我不希望他们能够帮助您使用非托管服务器。迁移到另一个服务器也不太可能直接解决根本问题。Windows上的php效率低下,可能有缺陷,但不会有您遇到的问题。