Rails アプリケーションには、PUT が変更をサーバーに戻すインライン編集機能があります。PUT 先の URL は、編集中のオブジェクトの種類やユーザーが表示しているページによって異なりますが、同じ JavaScript がすべてのページで機能をサポートしています。jQuery の AJAX リクエストがサーバーにアクセスせずに失敗することがあり、「エラー」以外のエラー メッセージが表示されないという問題が発生しています。コンソールでこれをデバッグしようとしましたが、成功しませんでした。非常に奇妙な部分は、渡された URL に$.ajax()
問題の原因があるように見えることです。
コンソールでは、これは期待どおりに機能します。
> errorCallback = function( jqxhr, status, err ){
console.log( "Ajax call encountered an error: '" + status + "'" );
console.log( jqxhr );
console.log( err );
};
> options = { type: 'PUT', error: errorCallback, data: { cerebro: true, name: 'cerebro-edit-span-2-title', pk: null, value: 'Test' }, url: '/staff/employees/2.json' };
> test1 = $.ajax( options );
> test1.readyState;
4
したがって、AJAX 要求が正常に完了し、エラー コールバックが発生せず、readyState
予想どおり 4 の最終結果が得られたことがわかります。しかし、URL の中間部分だけを変更した場合は次のようになります。
> options.url = '/staff/job_advertisements/2.json';
> test2 = $.ajax( options );
Ajax call encountered an error: 'error'
Object {readyState: 0, getResponseHeader: function, ... } // elided for clarity
X PUT http://localhost:3000/staff/job_advertisements/2.json jquery.js:8527
> test2.readyState;
0
この別の URL では、アプリケーション サーバーに到達する前に AJAX 呼び出しが失敗します。開発マシンのログを確認すると、要求がまったく行われていない/staff/job_advertisements/2.json
ことがわかります。つまり、問題の原因は、サーバーが 500 または 404 またはその他のエラー コードを返すことではないということです。ブラウザ。問題がサーバー側ではなくクライアント側であることを証明するため (およびアンダースコアと関係がある可能性を排除するため)、実際にはアプリケーションに存在しないいくつかのナンセンスな値に URL を設定しようとしました:
> options.url = '/staff/jobadvertisements/2.json';
> test3 = $.ajax( options );
X PUT http://localhost:3000/staff/jobadvertisements/2.json 500 (Internal Server Error) jquery.js:8527
Ajax call encountered an error: 'error'
Object {readyState: 4, getResponseHeader: function, ... } // elided for clarity
> test3.readyState;
4
> options.url = '/staff/empl_oyees/2.json';
> test4 = $.ajax( options );
X PUT http://localhost:3000/staff/empl_oyees/2.json 500 (Internal Server Error) jquery.js:8527
Ajax call encountered an error: 'error'
Object {readyState: 4, getResponseHeader: function, ... } // elided for clarity
> test4.readyState;
4
テスト 3 と 4 では、アプリケーション ログに要求、500 ステータス コード、および結果の例外も表示されますが、テスト 2 (失敗したケース) にはログ行がありませんでした。readyState
したがって、テスト 3 と 4 は、リクエスト パスが存在しない場合、エラー メッセージに 500 ステータス コードが含まれ、まだ 4 に設定されているため、リクエスト パスが存在しないという問題ではないことを示しています。アンダースコアが許可されていないという問題ではありません。
メソッドに関するjQueryのドキュメントを検索しましたがajax()
、支援が見つからないので... javascript / jQueryの達人、これをあなたに任せます:jQuery AJAXリクエストが失敗する前に失敗する可能性のあるURLについてはどうですか送信済?さらに重要なことに、これを修正するにはどうすればよいですか?