【问题标题】:Read from jQuery the value of a JSON array that only has an object从 jQuery 读取只有一个对象的 JSON 数组的值
【发布时间】:2016-01-20 16:20:41
【问题描述】:

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

对我来说困难的事情是将错误返回给 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数据的关键吗? if (data.hasOwnProperty('error')) { /* ... */ } else { /* ... */ }

标签: javascript php jquery arrays json


【解决方案1】:

您返回错误的代码是在 string 上调用 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)的对象。

【讨论】:

  • 是的,我使用 Chrome 的开发者工具在 .php 文件的响应中读到了"{\"error\":\"something go wrong\"}"。但是,如果我直接在 HTML div 中显示数据,我会看到 {"error":"something went wrong"} 没有斜线。这令人不安。稍后我会试试你的代码。非常感谢。
  • @Pablo:对,反斜杠是 JSON 中的转义字符,让我们可以在字符串文字中写入 "(就像我们使用双引号的 JavaScript 字符串文字一样)。
【解决方案2】:

试试这个:

PHP最后一行:

echo json_encode( array("error" => $object->queError()) );

JS最后一行:

$('#span-login-resp').html(data.error);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 2022-07-06
    相关资源
    最近更新 更多