gpt4 book ai didi

cakephp - 如何从 CakePhp 向 Jquery 发送 ajax 响应?

转载 作者:行者123 更新时间:2023-12-02 10:25:33 26 4
gpt4 key购买 nike

我在 View 中有这个脚本:

<script type="text/javascript">
$(document).ready(function() {
$("#addbrand").click(function() {
$.ajax({
url : '../brands/add',
data : {
name : "test",
shortname : "tst"
},
dataType : 'json',
success : function(html, textStatus) {
alert('Success ' + textStatus + html);
},
error : function(xhr, textStatus, errorThrown) {
alert('An error occurred! ' + errorThrown);
}
});
});
});</script>

在添加 Controller 中我有这些行:

... else if($this->request->is('ajax')){
if ($this->Brand->save($this->request->query)) {
// How to send feedback!?
}else{
// How to send feedback!?
}
$this->autoRender = false;
exit();
}

当我单击 addbrand 时,Ajax 操作成功运行,并且我可以在数据库中看到添加的行,但我不知道如何向用户发送错误或成功消息。我读过几个教程,但没有一个是关于 cakephp2.0 的,而 2.x 中一切都改变了。我还读过JSON and XML views但不幸的是我什么也听不懂!我需要发送状态代码。如果状态正常,那么我应该发送一个字符串数组(实际上是品牌名称),如果状态不正常,我应该发送一个字符串来解释操作未成功完成的原因。如果有人能帮助我,我将不胜感激。谢谢

<小时/>

更新:

我更改了代码。我使用了 CakeResponse(),现在我的操作是这样的:

if($this->RequestHandler->isAjax()){
if ($this->Brand->save($this->request->query)) {
return new CakeResponse(array('body'=> json_encode(array('val'=>'test ok')),'status'=>200));
}else{
return new CakeResponse(array('body'=> json_encode(array('val'=>'test not ok')),'status'=>500));
}
}

使用 CakeResponse 我可以很好地处理 Jquery 中可能的响应。

$("#addbrand").click(function() {
$.ajax({
url : '../brands/add',
data : {
name : "test",
shortname : "tst"
},
dataType : 'json',
success : function(data) {
alert("The brand has been saved");
},
error : function(data) {
alert("Eorror occured");
},
complete : function(data) {
alert($.parseJSON(data.responseText).val);
}
});
});

虽然在我看来,现在一切正常,我可以通过 Ajax 在客户端和服务器之间以 JSON 格式发送多个变量,但我需要知道这是否是在 CakePHP 中发送 Ajax 响应的标准方法?还有其他更简单的方法吗?

最佳答案

以下代码行完全执行任何操作 return new CakeResponse(array('body'=> json_encode(array('val'=>'test ok')),'status'=>200)); 在我的问题中:

$this->set('val','test ok');
$this->set('_serialize',array('val'));
$this->response->statusCode(200);

请记住,您需要做两件重要的事情:

  1. Router::parseExtensions('json'); 添加到 App/Config/routs.php。
  2. var $components = array("RequestHandler"); 添加到您的 Controller 。

我认为这种方式更好,因为你不需要返回任何东西。在之前的解决方案中,我们必须返回 cakeresponse 对象,而这与操作的本质不一致。

关于cakephp - 如何从 CakePhp 向 Jquery 发送 ajax 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12458235/

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