尝试使用$ http.put时遇到错误。该路线改为在slimPHP中点击我的$ app-> get块。
这是我的controller.js代码,其中credit是一个对象:
$http.put('/api/credit_module/credits/'+credit.id, credit).
success(function(data, status, headers, config){
if(data['errors'].length == 0){
console.log(data['results']);
}else{
alert(data['errors']);
}
});
在slimPHP代码中,这是单一信用的获取途径:
$app->get('/credits/:id', function ($id){
include 'DBConnects/credit_module_db.php';
include 'common/response/common_setup.php';
$data = $db->credit("id = ?", $id)->result_array();
if($data){
$result['status_code'] = 200;
}else{
$result['status_code'] = 101;
}
$result['results'] = $data;
$result['errors'] = $errors;
echo json_encode($result,128);
});
这是put路线,根本没有被击中:
$app->put('/credits/:id', function ($id) use ($app, $v){
include 'DBConnects/credit_module_db.php';
include 'common/response/common_setup.php';
include 'common/response/put_setup.php';
//Error validation is here
if(sizeof($errors) == 0){
$row = $row->update($bodyArray);
if($row != false){
$result['status_code'] = 200;
}else{
$result['status_code'] = 101;
$errors[] = 'failed to update row';
}
}else{
$result['status_code'] = 101;
}
$result['results'] = $data;
$result['errors'] = $errors;
echo json_encode($result,128);
});
以下是chrome中的请求:
然而,来自请求的结果数据来自get路由而不是put路由,因此不会发生任何更新。
我做错了什么?
编辑:
事实证明服务器阻止了所有PUT和DELETE请求。如果您没有root权限并且遇到奇怪的问题,请咨询您的托管公司。
答案 0 :(得分:0)
通过添加以下快速和脏的调试代码来确认您是否正在点击PUT
路由:
$app->put('/credits/:id', function ($id) use ($app, $v) {
die(var_dump('PUT ROUTE')); // Add this die and var_dump
// ... snip ...
});
然后从命令行发出PUT
请求:
curl -v -X PUT http://<your url here>/api/credit_module/credits/999
如果在curl请求的输出中得到PUT ROUTE
,请再次尝试Angular请求,以确保Angular请求没有问题。如果两个请求都返回PUT ROUTE
,则问题不在于Slim的路由。
事实上,你确定问题不在include 'common/response/put_setup.php';
吗?包含的代码中是否存在复制并发送错误导致PUT
路由返回与GET
路由相同的错误?如果调试证明您的PUT
路线被点击,我可能会选择进行故障排除。