2017-10-20 222 views
0

我正在使用React作爲我的rails項目的前端庫,我已經通過了一個顯示用戶錯誤的問題,我使用Ajax發送請求,但是我發現我的自我複製錯誤回調函數,如果服務器端在每個請求返回每個React.Component像裏面的錯誤:從React項目中刪除重複項

$.ajax({ 
    url: URL, 
    type: METHOD, 
    data: { 
     //data 
    }, 
    success: function() { 
     //calling some function 
    }.bind(this), 
    error(error) { 

     // begin 
     server_errors = JSON.parse(error.responseText); 
     array_of_keys_of_errors = Object.keys(server_errors); 
     for(i = 0 ; i < array_of_keys_of_errors.length; i++){ 
     nested_keys = Object.keys(server_errors[array_of_keys_of_errors[i]]); 
     for(j = 0 ; j < nested_keys.length; j++){ 
      array_of_errors = server_errors[array_of_keys_of_errors[i]][nested_keys[j]]; 
      for(k = 0 ; k < array_of_errors.length; k++){ 
      bootbox.alert({ 
       message: nested_keys[j] + ' ' + array_of_errors[k], 
       closeButton: false, 
      }); 
      } 
     } 
     } 
     // end 
    }, 
    }); 

也可把我的代碼冗餘了,我在想一個共享文件的有效方式包含共享函數並將其包含在每個React.Component中,但我沒有發現類似於此的內容。

+0

這不是一個服務器端的問題?嘗試在您的SQL查詢中添加「distinct」關鍵字。 – fungusanthrax

+0

不,我複製的代碼是響應顯示錯誤給用戶的每一個請求,這是我的問題。 –

+0

你可以與我們分享錯誤的功能嗎 –

回答

0

您可以創建一個函數來處理你的錯誤:

function handleErrors(errors) { 
    const server_errors = JSON.parse(error.responseText); 
    const array_of_keys_of_errors = Object.keys(server_errors); 
    for(i = 0 ; i < array_of_keys_of_errors.length; i++){ 
    nested_keys = Object.keys(server_errors[array_of_keys_of_errors[i]]); 
    for(j = 0 ; j < nested_keys.length; j++){ 
     array_of_errors = server_errors[array_of_keys_of_errors[i]][nested_keys[j]]; 
     for(k = 0 ; k < array_of_errors.length; k++){ 
     bootbox.alert({ 
      message: nested_keys[j] + ' ' + array_of_errors[k], 
      closeButton: false, 
     }); 
     } 
    } 
    } 
} 

,並在您的文件共享功能。

你會使用這樣的:

$.ajax({ 
    url: URL, 
    type: METHOD, 
    data: { 
    //data 
    }, 
    success: function() { 
    //calling some function 
    }.bind(this), 
    handleErrors 
}) 
+0

我剛開始時是這樣做的,但是我用我的rails項目做了不正確的操作,我在名爲'shared_functions.js'的'app/assets/javascript'下的獨立文件中創建了這個函數,謝謝。 –