0

私のアプリケーションには、選択イベントの後にコンボボックスからデータを取得する非常に単純なタスクがあります。

select イベントが発生すると、サーバー側から操作を要求する jQuery 関数にデータが渡されます。

これらはすべて問題ありませんが、サーバーの応答を処理する際に、Ajax は要求に対する失敗条件を受け取ります。私は jQuery と Ajax の新人なので、何が足りないのか、何が間違っているのかわかりませんでした。

Jspピース:

<input id="updStatus" 
    class="easyui-combobox" 
    name="updStatus"
    data-options="
    valueField:'id',
    textField:'Name',
    url:'StatusListCombo',
    onSelect:function updStatusTask(row) {
      $.fn.updStatusTask(row.id, ${task.id});
    }">

jQuery関数:

$.fn.updStatusTask = function (idStatus, idTask) {
  var result = $.post("TaskUpdateStatus", {
    idTask : idTask, 
    idStatus : idStatus
  });

  result.done(function( data ) {
    alert("data: " + data); //<--NOT REACHED!!
  });
  result.fail(function(jqXHR, textStatus) {
    alert("fail data: " + textStatus); //FIRED
  });
  result.always(alert("always"));//FIRED
};

サーバー側の方法:

@RequestMapping(value = "/TaskUpdateStatus")
public String TaskUpdateStatus(Long idTask, Long idStatus, HttpSession httpSession, HttpServletResponse resp) throws IOException {

  String result = new String();
  try {
    //... do DAO opperations to persist, everything Ok...
    resp.setStatus(200);
    result = "Task successfully updated.";
  }
  catch(Exception e) {
    result = "Error: " + e.getMessage(); 
  }

  return result;    
}
4

2 に答える 2

0

唯一の問題は、Controller によって返される String パラメータでした。コントローラーのタイプTaskUpdateStatusを からStringに変更するだけで十分voidであり、明らかに、returnステートメントを抑制します。

むしろ、テキストを jQuery イベント ハンドラーに返し、処理して表示する正しい方法は、response.getWritter().write("something").

@RequestMapping(value = "/TaskUpdateStatus")
public void TaskUpdateStatus(Long idTask, Long idStatus, HttpSession httpSession, HttpServletResponse resp) throws IOException {

  String result = new String();
  try {
    //... do DAO opperations to persist, everything Ok...
    resp.getWriter().write("Status changed from "
          + oldStatusName + " to " +   newStatusName);
    resp.setStatus(200);
  }
  catch(Exception e) {
    //... take care of exceptions
  }

}

エラーはスローされず、データは Ajax ポスト.doneイベント ハンドラーで正しく表示されます。

于 2013-08-27T20:13:19.607 に答える