0

事前定義された URL で ajax POST メソッドを呼び出すボタンがあります。サーバーが処理を完了した後、ページを更新するだけです

サーバーはデータベースから User オブジェクトを取得し、1 つの列を更新します。

ページが更新されると、時間の約 50% で、ユーザーはまだ更新されず、更新されたページには古い情報が表示されます。

注 - コードはクリーンアップされ、関連するもののみが表示されます

Ajax 投稿方法:

function buttonClick(){
   $.ajax({
      type : "POST",
      url : "?open_class=1",
      success : refresh()
   });
}

function refresh(){
   window.location = contextPath;
}

春のMVC

@RequestMapping(value = "/manager/listofquestions", method = RequestMethod.POST)
public String listOfQuestionsPost(
        Model model,
        HttpServletRequest request,
        Principal principal) {

    if(request.getParameter("open_class") != null){
        userService.openClass(principal.getName());
    }
    return "success";
}

ユーザーサービス

@Transactional
public void openClass(String name) {
    User user = userDao.getByName(name);
    user.setCodeword(codeWordService.GetNewCodeWord());
    userDao.update(user);
}

ユーザーダオ

public User update(User user) {
    sessionFactory.getCurrentSession().update(user);
    return user;
}

public User getByName(String userName) {
    Query query = sessionFactory.getCurrentSession().createQuery("from User where username=?");
    query.setString(0, userName);
    query.setCacheable(true);
    Object[] list = query.list().toArray();
    if(list.length == 0) {
        return null;
    }
    return (User) list[0];
}
4

1 に答える 1

0

Ajaxを正しく使用できなかったことが判明しました。ajax 投稿が開始されるとすぐに更新メソッドが呼び出されたため、ページの更新が速すぎました。次のようにする必要があります。

success: function() { refresh(); }

または、私がやったようにJqueryの投稿を使用してください

それを完成させるために-問題は休止状態ではありませんでした。でも応援よろしくお願いします

于 2013-07-21T18:34:30.740 に答える