过去几个小时这一直困扰着我,我尝试了各种各样的搜索,但从来没有找到答案的确切问题。也许询问并显示一些代码将帮助我解决这个问题。
我正在使用ajax对PHP发帖,我想给出一个通知,以便我可以更新页面上的div。在这种情况下,我只需要PHP来说出类似“Cfail”的内容,javascript会用它来更新页面内容。
最初,我打算尝试文字回复。所以,我的PHP就是这样的:
<?php
session_start(); //Because have an encoded captcha answer.
if(empty($_POST['captinput']) || md5($_POST['captinput']) !== $_SESSION['captchacode']){
echo 'Cfail';
}
?>
Javascript将是:
$(document).ready(function(){
$('form#Contact').submit(function(e){
e.preventDefault();
var $form = $(this);
var formdata = $form.serialize();
var myurl = $form.attr('action');
$('#loader').stop(true).fadeTo(300,1);
$.ajax({
url: myurl,
dataType: 'text',
cache: 'false',
type: 'POST',
data: formdata,
success: function(returned){
$('#loader').stop(true).fadeTo(300,0);
if(returned=='Cfail'){
alert("I read it right!");
}
}
});
});
});
它会很好地运行脚本,但结果永远不会是我要求的。警报显示了corrct文本,然而,研究表明,问题是PHP显然增加了空白区域。常见的答案是编码JSON响应。所以,我试过了。
更新了PHP:
<?php
sesson_start(); // Captcha Stored in Session
header('Content-type: application/json');
if(empty($_POST['captinput']) || md5($_POST['captinput']) !== $_SESSION['captchacode']){
$result = array('result' => 'Cfail');
echo json_encode($result);
exit;
}
?>
更新了Javascript:
$(document).ready(function(){
$('form#Contact').submit(function(e){
e.preventDefault();
var $form = $(this);
var formdata = $form.serialize();
var myurl = $form.attr('action');
$('#loader').stop(true).fadeTo(300,1);
$.ajax({
url: myurl,
dataType: 'json',
cache: 'false',
type: 'POST',
data: formdata,
success: function(returned){
$('#loader').stop(true).fadeTo(300,0);
if(returned.result=='Cfail'){
alert("I read it right!");
}
}
});
});
});
现在不再成功运行了。警报未出现,加载程序对象仍然可见(表示成功永远不会通过)。我尝试将一个错误部分放到ajax上,它确实解雇了它。但是,我不知道如何解析甚至弄清楚错误究竟是什么。我试图获得它的最多就是PHP输出的内容,即{“结果”:“Cfail”} ....这就是我期望PHP给我的东西。
我可以解决这个问题,我做了一个类似的设置,只是回应一个数字而不是单词,而且据我所知,它曾经工作得很好。我想知道我在这里做错了什么。
修改
我设法弄清楚我的问题是什么。我有一个require('config.php');会话开始和json_encode if语句之间。由于某些原因添加了外部文件,这只是我为代码设置了一些变量,所以在第一个{JSON对象之前添加了一些隐藏字符。
不知道为什么。正如我所说,它只是一个$ var ='stuff';在要求的情况,但显然它引起了问题。 :/
答案 0 :(得分:2)
像
一样使用 <?php
sesson_start(); // Captcha Stored in Session
header('Content-type: application/json');
if(empty($_POST['captinput']) || md5($_POST['captinput']) !== $_SESSION['captchacode']){
//$result = array('result' => 'Cfail');
$data['result'] = 'Cfail';
echo json_encode($data);
exit;
}
?>
这适用于您的javascript
答案 1 :(得分:1)
使用下面的代码,在成功回调中,首先解析你从后端收到的编码json对象并访问对象属性result
来检查它的值
success: function(returned){
returned = JSON.parse(returned);
$('#loader').stop(true).fadeTo(300,0);
if(returned.result=='Cfail'){
alert("I read it right!");
}