2016-08-01 4 views
1

Я хочу вставить значение в базу данных и метод $ .getJson(). Я проверяю, существует ли мое значение в базе данных, а если нет, я хочу вызвать $ .ajax, чтобы поместить его в базу данных. Я пробовал вот так, и модальный диалог всплывает, но метод продолжается с выполнением, и я мое приложение прерывается каждый раз, как предотвратить выполнение после появления модального диалога. Я пытаюсь поместить $ .ajax внутри блока else, но ничего, тогда я пробовал, как это, но ничего?

enter $("#btnSave").click(function (e) { 
    e.preventDefault(); 

    var form = $(this).closest("#forma1"); 

    $.ajax({ 
     type: "POST", 
     url: form.attr("Create"), 

     data: $.getJSON("/InspekcijskeKontrole/Check?id1=" + $("#kombo3").val() + "&id2=" + $("#kombo4").val(), function (data) { 

      if (data.InspekcijskoTijeloId != -1 && data.ProizvodId != -1) { 
       $.getJSON("/Proizvodi/VratiIme/" + data.ProizvodId, function (ime) { 

        if (ime != null) { 
         $("#modalni1 p").text("Inspekcijska kontrola za " + ime + " je vec izvrsena"); 
         $("#modalni1").modal({ backdrop: "static" }); 

        } 
       }); 

      } 

     }), 
     data:form.serialize(), 

     success: function (response) { 

     alert("Informacije su uspjesno ubacene"); 
     window.location.href = "/InspekcijskeKontrole/Index"; 


     }, 
     error: function (greska) { 
      alert("Doslo je do greske pri ubacivanju"); 
     } 

    }); 

});code here 
+0

, но почему вы используете два запроса 'getJSON'? – mmushtaq

+0

Один, чтобы проверить, существует ли объект, и один, чтобы получить имя объекта, если оно существует, для отображения информации о модальном диалоге. – jhony3

+1

Возможный дубликат [Как вернуть ответ от асинхронного вызова?] (Http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-a-асинхронный вызов) –

ответ

1

Это не работает, потому что две внутренние «Проверить» и «VratiMe» Аякс вызовов закончить после пост уже завершен.

Потому что они асинхронны (т.е. очередь и возвращение немедленно, а затем завершаются позднее).

Вы должны быть в состоянии изменить порядок вызовов на что-то вроде:

var form = $(this).closest("#forma1"); 

$.getJSON("/InspekcijskeKontrole/Check?id1=" + $("#kombo3").val() + "&id2=" + $("#kombo4").val(), function (data) { 

    if (data.InspekcijskoTijeloId != -1 && data.ProizvodId != -1) { 
     $.getJSON("/Proizvodi/VratiIme/" + data.ProizvodId, function (ime) { 

      if (ime != null) { 
       $("#modalni1 p").text("Inspekcijska kontrola za " + ime + " je vec izvrsena"); 
       $("#modalni1").modal({ backdrop: "static" }); 
      } 
     }); 
    } 
    else { 

     $.ajax({ 
      type: "POST", 
      url: form.attr("Create"), 

      data:form.serialize(), 

      success: function (response) { 

      alert("Informacije su uspjesno ubacene"); 
      window.location.href = "/InspekcijskeKontrole/Index"; 


      }, 
      error: function (greska) { 
       alert("Doslo je do greske pri ubacivanju"); 
      } 

     }); 
    } 
}); 
+0

Я пробовал, как это, но ничего не работает Я застрял в течение долгого времени, тогда у меня появилась ошибка для __RequstVerificationToken нет, но токен включить внутри serialize(); – jhony3

+0

Сделано обновление и перенесено другое на основе ваших дополнительных данных в вопросе и комментариях –

+0

Итак, вопрос в том, подает ли ваша форма * без * контрольных звонков? Похоже, это не так, это совершенно другая проблема и не имеет никакого отношения к вызовам ajax. –

1

Почему бы не сделать проверку и возможную вставку в одном запросе? Я бы предпочел сделать это одним запросом!

Но все в порядке, это не вопрос. Чтобы использовать результат $.getJSON в $.ajax, положите его в обратный вызов успеха $.getJSON. Например:

$.getJSON("getJsonUrl.html", function(responseOne) { 
    $.getJSON("anotherJsonRequest.html", function(responseTwo) { 
     $.ajax({ 
      url: "ajaxUrl.html", 
      type: "POST", 
      data = responseTwo 
     }); 
    }); 
});