2011-12-22 5 views
2

さて、Firebugを使用して、関数がDevで定義されていないかどうかを判断します。私が本番でやりたがっているのは、エラーが受信されたことを示すモーダルウィンドウで、クリックすると別のページにリダイレクトされます。それほど簡単ではありません。JavascriptとjQueryでトラッピング関数が定義されていないエラー

この機能は動作し、呼び出されるコンポーネントが機能することをご理解ください。私はjquery ajax関数を介して受信していないエラーを示す目的で関数呼び出しのスペルを間違えてしまいます。

私は非同期に実行されますいくつかのAJAX機能のデフォルトオプションを設定するには.ajaxSetupを使用しています:

$.ajaxSetup({ 
    type: "POST", 
    dataType: "json", 
    url: "DMF.cfc", 
    data: { 
    qID: 1, 
    returnFormat: "json" 
    }, 
    beforeSend: function() { 
     $('#loadingmessage').fadeIn(); // show the loading message. 
    }, 
    complete: function() { 
     $('#loadingmessage').fadeOut(); // show the loading message. 
    } 
    }); //end AjaxSetup 

実際のAJAX呼び出しがある:

$.ajax({ 
     data: { 
      method: 'getCurrentIssues' 
     }, 
     success: function(response) { 
      nsNewDebtshowDebtIssues(response); 
     },//end success function 
     error: function(jqXHR, exception) { 
      alert("Error running nsNewDebt.showDebtIssues"); 
     } 
    }) //end getCurrentIssues Ajax Call 

私は強制的にエラーsuccess関数で実行されるメソッドは、実際にはnsNewDebt.showDebtIssuesでなければなりません。 Firebugは正しくコンソールにエラーを表示します。nsNewDebtshowDebtIssuesは定義されていません。実際のエラーメッセージは実行されません。そのため、エンドユーザーがページを実行していた場合、ページがハングアップしていました。

要約すると、このようなエラーが発生した時刻を追跡する方法を知りたいのですが、.ajaxSsetupのエラーセクションに配置するのが望ましいですが、それぞれの.ajax呼び出しで必要な場合は優先します。

+0

「成功」機能のコードを「try {...} catch(err){...}」ブロックにラップするのはどうですか? – Pointy

答えて

1

まあ、エラーが実際に発生し、そのerrorハンドラが実際に呼び出されません。

あなたは、実際のAJAX要求エラーのためにとあなたのsuccessハンドラから発信、さらにエラーに同じハンドラを使用する場合は、名前の関数を定義し、あなたのerrorハンドラとして、あなたの中try/catchブロックからの両方に使用することができますsuccessハンドラー:

function handleError(jqXHR, status, exception) 
{ 
    alert("Error running request."); 
    // Or print something from 'jqXHR', 'status' and 'exception'... 
} 

$.ajax({ 
    data: { 
     method: "getCurrentIssues" 
    }, 
    success: function(response, status, jqXHR) { 
     try { 
      nsNewDebtshowDebtIssues(response); 
     } catch (x) { 
      handleError(jqXHR, status, x); 
     } 
    }, 
    error: handleError 
}); 
+0

間違っていたものの、確かに最も柔軟なソリューションです。これは、それらをすべて統治する1つのエラー関数を持つことを私が望むことを考慮に入れます。皆さんありがとうございました。 –

2

呼び出しを行う前に、あなたが行うことができます:

if(typeof nsNewDebtshowDebtIssues == 'function') { 
    // .. call it .. 
} 
3

をそれは、AJAXエラーではないので、あなたがajaxErrorメソッドからそれを扱うことができません。

成功メソッドでtry/catchを実行する必要があります。 (それはあなたのsuccessハンドラから来ているので)AJAX呼び出しが成功した後

success: function(response) { 
    try { 
     nsNewDebtshowDebtIssues(response); 
    } catch (ex) { 
     //exception occured 
     //alert("Error running nsNewDebt.showDebtIssues"); 
     alert(ex.message + '\n\tin file : ' + ex.fileName + '\n\t at line : ' + ex.lineNumber); 
    } 
} 
関連する問題