我正在处理网页的视图和控制器,我正在试图弄清楚它是如何工作的:
现在,我的工作就是提交投票。但是,当我运行它时,我从未看到警报弹出窗口,这让我担心我的设置无法正常运行。
以下是我的PHP网站控制器的代码:
if(!isset($_POST['poll'])) //UPON PAGE LOAD
{
//define relevant variables to be put into the view
}
if(isset($_POST['poll'])) //UPON jQuery $.Post() back to controller
{
if($_POST['poll']=='done')
$vote = 2;
if($_POST['poll']=='no')
$vote = 1;
$id = $_POST['id'];
$result = vote($user_id, $id, $vote); //inserts vote into Database
if( !$res )
echo json_encode(array('success'=>true, 'text'=>'success'));
else
echo json_encode(array('success'=>false, 'text'=>'fail'));
//I want ^this json data to be sent back to the jQuery of my view
}
if(isset($_GET['newListing']))
{
//code that would redifine relevant variables to be put into view
}
if(isset($_GET['newListing']) || !isset($_POST['poll']))
{
//code that does something--both upon page load and when needing to retrieve
//and define variables to put into view.
}
include('view.php');
以下是我的HTML / jQuery网站视图中的代码:
<html>
<body>
<form name='poll' id='poll' >
<INPUT TYPE="radio" name='poll' value='done'checked/>Done it.<br/>
<INPUT TYPE="radio" name='poll' value='no'/>No.</br>
<button id='submit-vote' onclick="postVote();">Submit</button>
<INPUT TYPE='hidden' name='id' value='<?php echo $id; ?>'/>
</form>
</body>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
function loadListing(){
$.get('controller.php?newListing=yes',function(data){
if(data.response == 'success'){
//something}
else{
return false;}
});
}
function postVote(){
$.post('controller.php', { poll: $('input:radio[name=poll]:checked').val(), id: $('input:hidden[name=id]').val()} , function(data){
if(data.success){
alert('data.text');
loadListing();
return true;}
else{
alert(data.text);
return false;}
},
"json");
}
</script>
</html>
任何帮助/建议表示赞赏!
修改: 从我的查看代码: HTML:
<fieldset id='poll'>
<INPUT TYPE="radio" name='poll' value='yes' checked/>Yes!<br/>
<INPUT TYPE="radio" name='poll' value='done'/>Done it.<br/>
<INPUT TYPE="radio" name='poll' value='no'/>No.</br>
<button id='submit-vote'>Submit</button>
<INPUT TYPE='hidden' name='id' value='<?php echo $id; ?>'/>
</fieldset>
jquery:
jQuery(function($){
$("#submit-vote").click(
function(){
alert("HELLO");
$.post('controller.php', { poll: $('input:radio[name=poll]:checked').val(), id: $('input:hidden[name=id]').val()} ,
function(data)
{
alert("THIS FUNCTION WORKS");
}, "json");
}
);
});
控制器几乎一样。当我现在点击提交按钮时,alert("HELLO");
被执行,根据Firefox的Firebug,$.post()
确实会发生。但是,alert("THIS FUNCTION WORKS");
不会被执行。
我需要帮助找出可能的原因......
谢谢!
答案 0 :(得分:2)
问题是json_encode创建了一个字符串。但是,在您的Javascript中,您尝试访问它,就像它是一个对象(data.success)一样。您需要先使用window.JSON.parse()将其转换为对象:
var dataObj = window.JSON.parse(data);
执行此操作后,您应该能够访问dataObj.success。
说实话,我不确定你为什么要把它变得那么复杂。为什么不返回一个简单的字符串,例如&#34; success&#34;或者&#34;失败&#34;?那么你不需要在php中编码对象或用JavaScript解码它。你只需这样做:
<强> PHP 强>
if( !$res )
echo 'success';
else
echo 'failure';
<强>的JavaScript 强>
if(data === 'success'){
//do your stuff
}else{
//do other stuff
}
根据OP对此答案的第一条评论进行编辑 一旦PHP脚本结束,您的JavaScript将重新获得控制权。在您发布的代码中,您在PHP脚本的末尾包含一个view.php文件。我不知道view.php里面有什么内容,包含这个文件很可能导致你的JS alert()仍然不会触发,即使你做了我上面描述的更改。这是因为如果在view.php文件中运行任何输出(即echo,print等),那么它将附加到json_encode创建的字符串中。结果将是window.JSON.parse()无法解析的字符串。
如果您希望脚本在回显后成功结束&#34;成功&#34;或者&#34;失败&#34; (或你的json_encoded版本),只需将return;
放在echo语句之后:
if( !$res ){
echo 'success';
else
echo 'failure';
}
return;
答案 1 :(得分:0)
只应将include('view.php');
放入if(!isset($_POST['poll'])) //UPON PAGE LOAD
代码中。