我正在使用Zend Framework。 作为一种设计模式,我正在使用状态设计模式。
现在您可能知道,Zend Framework允许您创建自定义控制器,可用于响应Ajax请求。 在我的例子中,我有以下ajax请求
function getResponse(name){
$.ajax({
dataType: 'json',
data: {button: name},
url: 'motor/ajaxtest',
type: 'post',
success: function(response)
{
}
});
}
每次按下特定按钮时都会调用函数getResponse。
public function ajaxtestAction()
{
$input_in = $this->getRequest()->getParam('button');
$Lok = new Lok();
$this->_helper->viewRenderer->setNoRender();
$text = array($Lok->getMotorState());
$phpNative = Zend_Json::encode($text);
echo $phpNative;
}
上面的代码是我对ajax请求的自定义响应。我想将按下的按钮的名称传递给$ Lok = new Lok();所以我可以在“Lok”模型类中使用它,而无需在“Lok”类中创建控制器的新实例
有没有人可以帮助我?
EDIT -----------------------------------
这是我的控制器:
class MotorController extends Zend_Controller_Action
{
public function init()
{
}
public function indexAction()
{
}
public function ajaxtestAction()
{
$input_in = array($this->getRequest()->getParam('button'));
$phpNativ1 = Zend_Json::encode($input_in);
echo $phpNativ1;
$Lok = new Lok();
echo $input_in;
$this->_helper->viewRenderer->setNoRender();
$text = array($Lok->getMotorState());
$phpNative = Zend_Json::encode($text);
echo $phpNative;
}
}
以下是我的Jquery函数:
$(document).ready(function(){
$("p").click(function(){
$(this).hide();
$("input[name=State]").val('Forwards');
});
function getResponse(name){
$.ajax({
dataType: 'json',
data: {button: name},
url: 'motor/ajaxtest',
type: 'post',
success: function(response)
{
}
});
}
$("button[name=on]").click(function() {
var d_response = getResponse('on');
});
});
这是我的Lok.php文件:
class Lok
{
private $newMotor;
private $newTimer;
private $newSpeaker;
private $mySession;
private $motorState;
private $input;
public function __construct()
{
//Method instances
$newMotor = new Motor();
$newTimer = new Timer();
$newSpeaker = new Speaker();
$this->motorState = $newMotor->getMotorState();
// Declaring the Session
$mySession = new Zend_Session_Namespace();
$mySession->s_motorState = $this->motorState;
}
public function __get($mySession)
{
return $this->mySession;
}
public function __set($motorState, $mySession)
{
$this->$mySession->s_motorState = $motorState;
}
public function getMotorState()
{
return $this->motorState;
}
public function playSound($soundNumber)
{
echo "Playing sound";
}
public function resetTimer()
{
echo "Resetting timer";
}
public function setInput($input_in)
{
$this->input=$input_in;
}
}
答案 0 :(得分:1)
正如我之前所说,您应该通过调用请求发布数据来获取按钮名称,这可以通过$postData = $this->getRequest()->getPost()
然后,要将输出输入模型,在模型类中,您将为其创建属性以及setter和getter方法。
class Lok {
protected $button;
public function setButton($btn){}
public function getButton(){}
}
然后就像做
这样的事情一样容易$lokModel->setButton($postData['button'])
答案 1 :(得分:0)
首先,感谢您发布解决方案。
我试图实施你的解决方案,但不幸的是它没有用。
所以经过一夜好眠,我再次看了一下这个问题。我认为问题是,那 $ postData = $ this-> getRequest() - > getPost()或$ postData = $ this-> getRequest() - > getParam('button') 在响应itelfe中执行。
<pre>string(2) "sr"
</pre>["Not Moving"]
这是JSON响应在Google Chrom调试器中的样子。如果您熟悉此Google Chrome调试器,您就知道我的意思了。
现在我想要的按钮名称位于&amp; quot标签之间唯一的问题是,将它从那里拿出来。并且能够在触发响应之前使用它。我还尝试了init()中的getPost()和getParam('button')以及Controller中的indexAktion()方法,但它仍然无法正常工作
public function init()
{
postData = $this->getRequest()->getPost()
$lokModel->setButton($postData['button'])
}
public function indexAction()
{
postData = $this->getRequest()->getPost()
$lokModel->setButton($postData['button'])
}
还有其他想法吗?