我有一个jQuery和一个PHP文件。如果在PHP中该过程正确完成,则返回2(通过echo json_encode(2))。我在jQuery文件中捕获了它,并在HTM div上显示了一个字符串。我可以做这部分而没有任何问题。

对我来说,很难做到的是将erorr返回ajax(在出现时)显示在HTML div上。我想返回一个JSON数组{“ error”:“ 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..."}
}

最佳答案

返回错误的代码正在字符串上调用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)的对象。

关于javascript - 从jQuery读取仅包含一个对象的JSON数组的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34905180/

10-12 12:24
查看更多