2016-02-26 71 views
-1

我只是想知道是否有一種方法可以在使用json_decode回顯響應時繞過所有PHP消息。用AngularJS忽略PHP消息

我目前的問題是,如果我的PHP代碼有任何回聲或其他任何包含在輸出中的數組除外,我的Javascript根本無法工作。

PHP:

<?php 
error_reporting(1); 
$errors = array(); 
$data = []; 
// data from angular to be handled and 
// then if all goes well set submission to true to display with ng-show 
$data["submission"] = true; 
header('Content-Type:application/json;'); 
echo json_encode($data); 
?> 

JS:

$scope.testProcessForm = function() { 
     $http({ 
     method : 'POST', 
     url  : 'reg.php', 
     data : $scope.formData, 
     headers : {'Content-Type': 'application/x-www-form-urlencoded'} 
    }) 
     .then(function(response) { 
     console.log(response); 
     $scope.submission = response.data.submission; 

     }, function(error) { 
      console.log('error', error); 

我認爲通過使用response.data.submission我可以只訪問裏面有,但如上所提到的數據如果包含任何不在數組中的PHP輸出,代碼會中斷。

是否有可能只是訪問/響應$ data數組,以便它不會中斷?

+0

你應該使用'error_log',而不是'echo'打印出調試信息/錯誤。使用'error_log'會把消息放到'php_error_logs'文件中。 –

+0

如何不在PHP中輸出任何多餘的消息,並確保您輸出實際有效的JSON ...! – deceze

回答

1

可以調用前用ob_cleanhttp://php.net/manual/en/function.ob-clean.php)輸出最後的回聲:

<?php 
error_reporting(1); 
// you also need to add ob_start() 
ob_start(); 
$errors = array(); 
$data = []; 
// data from angular to be handled and 
// then if all goes well set submission to true to display with ng-show 
$data["submission"] = true; 
header('Content-Type:application/json;'); 
ob_clean(); 
echo json_encode($data); 
?> 
+0

太棒了,正是我需要的,謝謝! – HenrikM

1

error_reporting();應設置爲0 =>error_reporting(0);

還要注意的是所有可能的條件,可能會導致錯誤應該語法處理,您可以發送錯誤代碼(使用http_response_code(404/500))以及可以在客戶端讀取的響應。

1
error_reporting(0); 

而不是

error_reporting(1); 
+0

它仍然顯示我的回聲從我的PHP代碼:(這是否意味着我必須刪除所有的回聲? – HenrikM

+0

啊對不起 - 我誤解了,並認爲你只是想壓制錯誤,我可能會建議避免回聲的東西。 _need_以這種方式呈現輸出,可以考慮啓動一個名爲'$ output'或類似的變量,並將輸出附加到它'$ output。='你的東西';'然後你可以在需要時回顯它,當你不需要時彈出不需要它。 – Bat