2017-10-12 21 views
0

私はデータベースからユーザーを削除する簡単なPOST要求を作成しています。 DB操作は終了しますが、成功関数を表示するとエラーになります。私のAJAXリクエストに使用する正しいAJAXヘッダーは何ですか?私はTomcat 8.5とjquery 3.2.0を使用しています。ここでJSのコードは次のとおりです。ajax成功関数のエラー

$.ajax({ 
     url: "./users/remove", 
     type: "POST", 
     method: "POST", 
     data : { 
      "userId" : data.userId, 
      "userName" : data.userName 
     }, 
     success : function(data) 
     { 
      alert(data); 
     }, 
     error : function() 
     { 
      alert("There was an unexpected error when removing the users."); 
     } 
    });  

Javaマッピング:

@RequestMapping(value = "https://stackoverflow.com/users/remove", method = RequestMethod.POST) 
public String removeUser(@RequestParam(value="userId") String userId, @RequestParam(value="userName") String userName, HttpServletRequest request, HttpServletResponse response) 
{ 
RFQVBOImpl bo = new RFQVBOImpl(); 
String responseMsg = bo.removeUser(userId); 
String alertMsg; 

if(responseMsg.equals("TRUE") || responseMsg.equals("DUPLICATE")) 
{ 
alertMsg = userName + " was removed successfully."; 
} 
else 
{ 
alertMsg = "There was an error when removing " + userName; 
} 

return alertMsg; 
} 

編集:私はこのようなJavaScriptで一般的な404エラーを取得し続けました。

POST http://localhost:8080/rfqv/users/add 404()

送信する@ jqueryの-3.2.0.min.js:4

AJAX @ jqueryの-3.2.0.min.js:4

(匿名) @ view-users.js:107 //呼び出される関数の名前。

派遣@のjqueryの-3.2.0.min.js:3

q.handle @ jqueryの-3.2.0.min.js:「テキスト:3


私はデータ型を追加しました"をajaxヘッダーに追加し、405エラーを受け取りました: リクエストメソッド 'GET'はサポートされていません

説明リクエストラインで受け取ったメソッドは、オリジンサーバーで認識されていますが、ターゲットリソースではサポートされていません。 *私はJavaメソッドを上記と同じままにしました。

+0

エラーとは何ですか? –

+0

コメントにエラーと追加情報を追加しました。 – Leoking938

答えて

1

問題はヘッダーに関するものではありません。問題はハンドラがStringを返すことです。 spring-mvcを使用している場合、デフォルトでSpringは、要求ハンドラが文字列を返すときにはビューであるため、その名前のビューを検索しようとします。

@RequestMapping(value = "https://stackoverflow.com/users/remove", method = RequestMethod.POST, produces = "text/plain") 
@ResponseBody 
public String removeUser(@RequestParam(value="userId") String userId, @RequestParam(value="userName") String userName, HttpServletRequest request, HttpServletResponse response) 
{ 
    ... 
} 

あなたは、AJAXのオブジェクトから、typeプロパティを削除する必要があり、それが今dataTypeプロパティを使用して、期待してください:春はあなたが@ResponseBodyアノテーションを使用する必要があるビューを返すされていません知っているように

、テキストの応答:

$.ajax({ 
    url: "./users/remove", 
    method: "POST", 
    dataType: "text", 
    data : { 
     "userId" : data.userId, 
     "userName" : data.userName 
    }, 
    success : function(data) 
    { 
     alert(data); 
    }, 
    error : function() 
    { 
     alert("There was an unexpected error when removing the users."); 
    } 
}); 

実際にすべきことは、jsonオブジェクトを返すことです。あなたのようなアイデア何かを取得するために:

public class RestResponse { 
    private final boolean success; 
    private final String message; 

    public RestResponse(final boolean success, final String message) 
    { 
     this.success = success; 
     this.message = message; 
    } 

    public boolean isSuccess() 
    { 
     return success; 
    } 

    public String getMessage() 
    { 
     return message, 
    } 
} 

お使いのコントローラまだ@ResponseBody復帰前のクラスのインスタンスを使用する必要があります。

@RequestMapping(value = "https://stackoverflow.com/users/remove", method = RequestMethod.POST, produces = "application/json") 
@ResponseBody 
public RestReponse removeUser(@RequestParam(value="userId") String userId, @RequestParam(value="userName") String userName, HttpServletRequest request, HttpServletResponse response) 
{ 
    ... 

    if(responseMsg.equals("TRUE") || responseMsg.equals("DUPLICATE")) 
    { 
    return new RestReponse(true, userName + " was removed successfully."); 
    } 

    return new Response(false, "There was an error when removing " + userName); 
} 

をそして、あなたのAjaxオブジェクトは、json応答今期待する必要があります:

$.ajax({ 
    url: "./users/remove", 
    method: "POST", 
    dataType: "json", 
    data : { 
     "userId" : data.userId, 
     "userName" : data.userName 
    }, 
    success : function(data) 
    { 
     alert(data.message); 
    }, 
    error : function() 
    { 
     alert("There was an unexpected error when removing the users."); 
    } 
}); 

あなたはErrorRestResponseを作成し、possiblを指定するフィールドを追加するRestResponseクラスを拡張することができeエラー。

+0

ありがとう!これは私のユーザー/すべての方法が機能していた理由を説明しますが、他の方法はそうではありませんでした。 JSONを返信する際のヒントをお寄せいただき、ありがとうございます。 – Leoking938