您好我有一个简单的jquery代码请求put to cakephp
$("#putBtn").click(function(){
var id = $("#searchTxt").val();
$.ajax({
url: 'http://localhost/cakephp/recipes/'+id,
type: 'PUT',
async: false,
cache: false,
dataType:'json',
data:{
name:"777",
number:"777"
},
success: function(data) {
console.log(data);
},
error: function(textStatus, errorThrown) {
console.log("error");
}
});
});
问题是当运行此命令并将其发送到cakephp时 这是错误的
/ cakephp中/食谱/ 1。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' null'因此不允许访问。 jQuery的2.1.0.js:8556 错误
在我的cakephp中,我只是按照本教程 //book.cakephp.org/2.0/en/development/rest.html
public function edit($id) {
header("Access-Control-Allow-Origin: *");
header('Content-Type: application/json');
header("Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE");
header("Access-Control-Allow-Headers: Content-Type");
$this->viewClass = 'json';
if ($this->Recipe->save($this->data)) {
$message = 'Saved';
} else {
$message = 'Error';
}
$this->set(array(
'message' => $message,
'_serialize' => array('message')
));
}
我还添加了router.php和
Router::resourceMap(array(
array('action' => 'index', 'method' => 'GET', 'id' => false),
array('action' => 'view', 'method' => 'GET', 'id' => true),
array('action' => 'add', 'method' => 'POST', 'id' => false),
array('action' => 'edit', 'method' => 'PUT', 'id' => true),
array('action' => 'delete', 'method' => 'DELETE', 'id' => true),
array('action' => 'update', 'method' => 'POST', 'id' => true)
));
Router::mapResources('recipes');
Router::parseExtensions();
我不知道为什么cakephp不接受我的PUT或DELETE命令请求。 有什么建议或意见吗?或者我做错了什么。 thx提前。
答案 0 :(得分:1)
我遇到与 CakePHP版本2.5.4 类似的问题,用于解析PUT调用。
不优雅,但确实有效。
前端代码:
$("#myButton").click(function() {
$.ajax({
type : 'PUT',
url : '/projects/foo',
dataType : 'json',
data : JSON.stringify({
'projectId' : 789,
'desc' : "cheese cake",
}),
success: function(return_data) {
alert("success");
console.log(JSON.stringify(return_data));
},
error: function(return_data) {
alert("error");
console.log(JSON.stringify(return_data));
});
});
后端代码(app / Controller / ProjectsController.php)
public function foo() {
$this->autoRender = false;
if($this->request->is('PUT')) {
$in = $this->request->data;
reset($in);
$in = json_decode(key($in), true);
$project_id = $in['projectId'];
$desc = $in['desc'];
}
$response = array(
'project_id' => $project_id,
'desc' => $desc,
);
echo json_encode($response);
exit;
}
结果:
测试此代码时检查控制台。它将首先发回您发送的内容,但会保证CakePHP中的后端代码现在可以解析这些JSON PUT请求。