2014-02-17 1 views
0

У меня возникла проблема с отправкой выбранных значений в базу данных с несоответствующими значениями. Вот сценарий, в котором вызов ajax сопоставляется с соответствующей функцией Java. Проблема в том, что я не получаю правильные выбранные значения в БД, когда пользователь входит в систему в первый раз. Просьба предоставить решение ....Вызов 2 Ajax вызывает один из них с помощью JQuery Ajax

Вот мой Jquery Ajax

if(selectedproductIds != '') 
     {    
     $.ajax({ 
       url : "selectedProducts", 
       data : "selectedproducts="+selectedproductIds, 
       type : "POST", 
       success : function(data) { 
       } 
      }); 
      $.ajax({ 
       url : "<c:out value= "${saveDemoURL}"/>", 
       data : request, 
       type : "POST", 
       success : function(data) { 
        showNotification({ 
         message : "", 
         type : "success", 
         autoClose : true, 
         duration : 5 
        }); 
        resetForm(); 
        alert("Demo Request Saved Successfully"); 
       } 
      }); 

Первые карты Ajax вызова этой функции Java

@RequestMapping(value = "/selectedProducts") 
public @ResponseBody 
String getSelectedProducts(
     @RequestParam(value = "selectedproducts") String[] selectedproducts, 
     Map<Object, Object> map) { 
    List<Product> selectedProd = new ArrayList<Product>(); 
    for (String prod : selectedproducts) { 
     Product product = new Product(); 
     product.setId(Integer.parseInt(prod)); 
     selectedProd.add(product); 
    } 
    if (!Util.isEmpty(selectedProd)) { 
     map.put("selectedproducts", selectedProd); 
    } 
    for (Product product: selectedProd) { 
     LOGGER.info("Demo ID:"+ " List of selected products:"+product.getId()); 
    } 
    selectedProdList = selectedProd; 
    return "success"; 
} 

Вторые карты вызова Ajax к этой java-функции

@RequestMapping(value = "/saveDemo") 
public @ResponseBody 
Map<Object, Object> saveDemo(@ModelAttribute("demoBean") DemoBean demoBean, 
     Model model, Map<Object, Object> map) { 
    Map<Object, Object> output = null; 
    Demo demo = new Demo(); 
    try{ 
     ...... 
       } 
      catch{.....} 

    return output; 
} 

ответ

0

Изменить код в этот формат: $.ajax().ajax;:

if(selectedproductIds != '') 
     {    
     $.ajax({ 
       url : "selectedProducts", 
       data : "selectedproducts="+selectedproductIds, 
       async: false, 
       type : "POST", 
       success : function(data) { 
       } 
      }).ajax({ 
       url : "<c:out value= "${saveDemoURL}"/>", 
       data : request, 
       async: false, 
       type : "POST", 
       success : function(data) { 
        showNotification({ 
         message : "", 
         type : "success", 
         autoClose : true, 
         duration : 5 
        }); 
        resetForm(); 
        alert("Demo Request Saved Successfully"); 
       } 
      }); 
+0

Mude seu código para este formato: Измените ваш код в этом формате – Justinas

+0

Извините, я думал, что на 'pt.stackoverflow.com' – PSyLoCKe

0

Я не 100% уверен, что я понимаю, что ваши две функции делают, но если я прав, и вы пытаетесь выполнить что-то который обычно будет заключен в транзакцию, тогда вы не хотите координировать это с интерфейсом вообще. Классический пример транзакции - это деньги из счета одного человека и перевод его в другой. Если этот процесс прерывается посередине из-за сбоя питания, перезагрузки ноутбука, сетевых проблем и т. Д., Тогда все должно вернуться к исходному состоянию, иначе деньги могут просто исчезнуть с одного аккаунта и никуда не уйти.

Я хочу передать вам этот вопрос: jQuery deferred chaining problems

Это немного отличается тем, что автор уже понял, что обещания могут быть ключом к получению вещи произойти вместе. Но обратите внимание, что я отвечаю на него дважды. Второй момент заключается в том, чтобы конкретно объяснить, что транзакции никогда не должны координироваться с интерфейсом. Если у вас есть две операции с базой данных, которые должны всегда заполнять вместе, тогда у вас должен быть только один вызов API, который получает все данные, необходимые для обоих вызовов, и вы делаете их вместе в фоновом режиме. Технически, даже тогда вы должны использовать что-то вроде транзакций базы данных на внутренней стороне, чтобы обернуть их, чтобы сбой питания там не оставил вас с половиной выполненной операции. Но неудачи в середине ваших многошаговых процессов на 1000% более вероятны, если вы попытаетесь выполнить их по сети между браузером и сервером. Получите эту логику на сервере, где он принадлежит.

Смежные вопросы