分析
- コンソールを開き、次のエラーメッセージを見つけます。
CORSポリシーによってブロックされています:「Access-Control-Allow-Origin」ヘッダーco…
- また、直接取得にはデータがあり、サーバーが正常であることを示しています
- ブラウザf12を使用してパケットをキャプチャし、ブラウザajax非同期リクエストがサーバー応答のJSONデータを取得しないことを確認します
- パラメータcopyajax非同期リクエストアドレスを使用して、ブラウザに直接入力し、Enterキーを押します。jsonデータが正常に応答されたことがわかりました。
- プロのフィドラーを使用してパッケージをキャプチャすると、ajax非同期POSTリクエストサーバーがjsonデータに応答しましたが、ブラウザーでは応答しなかったことがわかりました。
- ブラウザがサーバーの応答データをブロックしたと結論付けることができます
解決
サーバー側フィルターにdoFilter()
応答ヘッダーを設定して、クロスドメイン要求応答をシールドするブラウザーのデータ問題を解決します
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpServletRequest request = (HttpServletRequest) servletRequest;
//http://xxx.xxx.xxx.xxx是你的前端地址 不是80端口有端口请设置端口http://xxx.xxx.xxx.xxx:端口号
response.setHeader("Access-Control-Allow-Origin","http://xxx.xxx.xxx.xxx");
response.setHeader("Access-Control-Allow-Credentials","true");
filterChain.doFilter(request, response);
注意
http://xxx.xxx.xxx.xxx
http://xxx.xxx.xxx.xxx:80
ブラウザとは異なります。フロントエンドポートがポート80の場合はhttp://xxx.xxx.xxx.xxx
、ポート80を後ろに追加せず、直接使用してください。http://xxx.xxx.xxx.xxx