2016-01-20 57 views
1

我有一个jQuery和一个PHP文件。如果在PHP中该过程正确完成,则返回2(由echo json_encode(2))。我在jQuery文件中捕获它,并在HTM div上显示一个字符串。我可以做这部分没有任何问题。从jQuery读取仅包含对象的JSON数组的值

对我而言,困难的事情是将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..."} 
} 
+0

你有没有tryied检查你的JSON数据的关键? 'if(data.hasOwnProperty('error')){/ * ... * /} else {/ * ... * /}' –

回答

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)返回一个对象。

+0

是的,我读了“{\”error \“:\”出错了\“}”在使用Chrome的开发者工具的.php文件的响应中。但是如果我直接在HTML div中显示数据,我会看到{“error”:“出错了”}而没有斜杠。这令人不安。 在那一刻我会尝试你的代码。非常感谢。 –

+0

@Pablo:对,反斜杠是JSON中的转义字符,可让我们在字符串文字中编写'''(就像我们在使用双引号时JavaScript字符串文字一样)“ –

1

试试这个:

PHP最后一行:

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

JS最后一行:

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

非常感谢。尝试你的代码:) –

+0

TJ Crowder给出了一个很好的解释。使用他的代码^^ – esJuanMa

+0

此代码的作品。谢谢。 –

相关问题