Backbone/PHPdestroy/DELETE请求错误

Backbone/PHP destroy/DELETE request error

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

我可以使模型 .save().fetch() 请求正常,请求已发送,PHP 处理请求,returns json。

我遇到的问题是尝试执行 .destroy() 请求(我 do 发送了一个 ID)。来自 .destroy() 请求的响应 returns 错误和 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 却不会要求..?

对,原来我使用旧版本PHP,具体是5.2.1.4版本。

在 IIS 中,我的站点设置为在 "PHP Manager" 下使用 5.3.6,但是有一个 "Handler Mapping" 将 .php 个文件指向 5.2.1.4。

所以错误消息是正确的,我的 PHP 版本不支持命名空间。

更新

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

所以我的 GETPOST 动词由 5.3.6 处理,但我的 DELETE 由 5.2.1.4 处理 - 因此出现与名称空间相关的错误,但仅限于DELETE 个请求。

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