我有一个jQuery和一个PHP文件。如果在PHP中进程正确完成,则返回2(通过echo json_encode(2))。我在jQuery文件中捕获它,并在HTM div上显示一个字符串。我可以毫无问题地做这部分。
对我来说困难的事情是将eror返回到ajax,当它发生时,显示在HTML div上。我想回来一个JSON数组{"错误":" xxx"}其中" xxx"是由php生成的错误。
所以问题是我无法获得"错误"的价值。显示它的关键。 我在网站上阅读了很多类似的主题,但它们是关于读取多个对象的值。
jQuery文件:
$('#log').submit(function(event) {
event.preventDefault();
var stuff = $(this).serializeArray();
stuff.push({name:'tag', value:'login'});
$.ajax({
url: './php/logreg.php', //Como si fuera el action del form
type: 'post', //Por defecto es get
dataType: 'json',
data: stuff,
beforeSend: function(){
$('#span-login-icon').css('display','inline');
}
})
.done(function(data){
if(data == 2){
$('#span-login-resp').html('Correcto');
}
else{
$('#span-login-resp').html(data);
}
});
});
PHP文件:
if($object->queError() === ''){
echo json_encode(2);
}
else{
echo json_encode('{"error"'.':"'.$object->queError().'"'.'}'); //output: {"error":"xxx..."}
}
答案 0 :(得分:4)
返回错误的代码是在字符串上调用json_encode
,这可能不是你想要的,因为你最终会返回一个JSON字符串字面值,而不是它中的文字定义的对象。
也就是说,您目前正在返回此JSON:
"{\"error\":\"something went wrong\"}"
你可能想要返回这个JSON:
{"error":"something went wrong"}
你可能想要:
else {
echo json_encode(array(
'error' => $object->queError()
));
}
(手动构建JSON字符串几乎总是不是最佳选择。)
然后在ajax
回调
.done(function(data) {
if (data == 2){
$('#span-login-resp').html('Correcto');
}
else {
$('#span-login-resp').html(data.error);
// ^^^^^^---------------- Note
}
});
或者可能:
.done(function(data) {
if (data && data.error){
$('#span-login-resp').html(data.error);
}
else if (data == 2) {
$('#span-login-resp').html('Correcto');
}
else {
$('#span-login-resp').html('Ocurrió un error inesperado');
}
});
或者,为了与成功返回的样式(只是数字2)保持一致,您只需返回一个字符串:
echo json_encode('error: ' . $object->queError());
然后
.done(function(data) {
if (data == 2){
$('#span-login-resp').html('Correcto');
}
else {
$('#span-login-resp').html(data);
}
});
FWIW,即使它不再需要,我可能会返回一个带有error
属性(包含错误)或result
属性(包含2)的对象。
答案 1 :(得分:2)
试试这个:
PHP最后一行:
echo json_encode( array("error" => $object->queError()) );
JS最后一行:
$('#span-login-resp').html(data.error);