我在服务器端使用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 POST
和GET
请求?
答案 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
)。
所以我的GET
和POST
动词由5.3.6处理,但我的DELETE
由5.2.1.4处理 - 因此与命名空间相关的错误,但只在{{{ 1}}请求。
所以,教训是...当使用IIS和PHP时,请检查DELETE
文件的处理程序映射,以确保使用的是正确的版本,并检查处理程序映射中接受的动词