gpt4 book ai didi

php - 从 Backbone 到 Slim REST 服务的 PUT 请求导致 404 Not Found

转载 作者:行者123 更新时间:2023-12-04 05:19:17 24 4
gpt4 key购买 nike

我有一个调用 Slim REST 服务的主干脚本。 GET 请求工作正常,PUT 请求返回 404 Not Found。注意:这一直有效,直到我的代码最近被移动到不同的服务器(并且它在本地工作),所以我猜它与 Apache 配置设置有关。这是主干脚本的一个片段:

jQuery(document).ready(function ($) {

//define box model
var Box = Backbone.Model.extend({
url: function () {
var urlId = (this.id) ? this.id : "";
var myUrl = "/wp-includes/api/service.php/box/" + urlId;
return myUrl;
}
});

var BoxView = Backbone.View.extend({
tagName: "div",
template: $("#boxTemplate").html(),

initialize: function () {
this.model = new Box(box);
this.render();
},

saveBox: function(e){
e.preventDefault();
$("#boxMessage").empty();
var formData = {},
prev = this.model.previousAttributes();

$(e.target).closest("form").find(":input").not("button").each(function (){
var el = $(this);
formData[el.attr("id")] = el.val();
});

this.model.set(formData);
this.model.save(
{ },
{
success: function() {
$("#boxMessage").html("Box information saved.");
},
error: function() {

}
}
);
}

这是 Slim REST 服务的一个片段:
<?php

require 'Slim/Slim.php';

$app = new Slim();

$app->get('/workouts/:id', 'getWorkout');
$app->put('/box/:id', 'updateEventBox');

$app->run();

function getWorkout($id) {
echo json_encode(GetEventCompetitorWorkout($id));
}

function updateEventBox($id) {
$request = Slim::getInstance()->request();
$body = $request->getBody();
$eventBox = new EventBox(null);
$eventBox->TakeJson($body);
$eventBox->Save();
}

这是请求的 header 信息:
Request URL:http://www.mydomain.com/wp-includes/api/service.php/box/1
Request Method:PUT
Status Code:404 Not Found

更新:刚刚测试了对同一服务的 POST,它运行良好。 PUT 仍然失败。

最佳答案

我发现一些服务器只启用了 GET、POST、HEAD 并且未启用 REST 所需的 PUT、DELETE 并不少见。情况可能是这样。

要对此进行测试,您可以通过在代码之前调用它来告诉 Backbone 使用“模拟 HTTP”:

Backbone.emulateHTTP = true;

这将使主干只使用 GET/POST 请求,但是它将附加到查询字符串“_method=PUT”或“_method=DELETE”,您可以在服务器端使用它来检测预期的 HTTP 动词。

因此,在服务器端,您需要在 index.php 文件的第一行(在任何框架加载之前)执行以下操作:
if (isset($_REQUEST['_method'])) $_SERVER['REQUEST_METHOD'] = $_REQUEST['_method'];

关于php - 从 Backbone 到 Slim REST 服务的 PUT 请求导致 404 Not Found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13841272/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com