5

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についてはどうですか送信済?さらに重要なことに、これを修正するにはどうすればよいですか?

4

1 に答える 1

6

AdBlock [Plus] を有効にしていますか? 含まれている場合は、advertisements. というか、そうらしい・・・_advertisements

于 2013-03-28T21:06:11.237 に答える