Backbone / PHP破坏/ DELETE请求错误

时间:2015-03-06 11:03:54

标签: php ajax json backbone.js

我在服务器端使用Backbone.js和PHP。我的PHP版本是5.3.6,因此支持名称空间。

我可以使模型.save().fetch()请求正常,发送请求并且PHP处理请求并返回json。

我遇到的问题是尝试.destroy()请求(我发送ID)。 .destroy()请求的响应会返回错误,并返回responseText

<b>Parse error</b>:  syntax error, unexpected T_STRING in <b>C:\myfolder\api.php</b> on line <b>9</b><br />

api.php中的第9行只是:namespace App;(这是我PHP中的第一行)。

就像我说的那样,.save()(POST)和.fetch()(GET)请求工作,该行没有错误,但.destroy()(DELETE)请求在该行上发生错误。

我使用ajaxPrefilter将ajax选项记录到控制台,显示:

dataType: "json"
type: "DELETE"
url: "/api/v1/authenticate/10"

所有这些似乎都是正确的。

为什么我可能会为RESTful DELETE请求收到这样的PHP错误,而不是RESTful POSTGET请求?

1 个答案:

答案 0 :(得分:1)

是的,事实证明我 使用旧版本的PHP,版本5.2.1.4是具体的。

在IIS中,我的网站设置为在“PHP Manager”下使用5.3.6,但是有一个“处理程序映射”将.php文件指向5.2.1.4。

因此错误消息是正确的,我的PHP版本不支持名称空间。

<强>更新

经过更多检查后,我现在明白了。我有.php的两个处理程序映射条目。一个用于5.3.6(允许GET&amp; POST),另一个用于5.2.1.4(允许所有动词包括DELETE)。

所以我的GETPOST动词由5.3.6处理,但我的DELETE由5.2.1.4处理 - 因此与命名空间相关的错误,但只在{{{ 1}}请求。

所以,教训是...当使用IIS和PHP时,请检查DELETE文件的处理程序映射,以确保使用的是正确的版本,并检查处理程序映射中接受的动词