2016-01-20 89 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

此代碼的作品。謝謝。 –

相關問題