2014-11-15 3 views
0

я пытаюсь использовать на success и complete вместе, но он не работает, , если я не использую dataType: "jsonp" то Success работу, если я включить это, то на complete работаетна полную и в случае успеха оба вместе не работают

var reRank=false; 
    function reAssign() { 
    if (!reRank){ 
     reRank = true; 
     $.ajax({ 
      type : "POST", 
      dataType: "jsonp", 
      data : { 
       "id" : $("#boxId").val(), 
       "value" : $("#hidValue").val() 
      }, 
      url : "/ajax/save", 
      complete : function() { 
       reRank = false; 
      }, 
      success : function(data) { 
       var obj = JSON.parse(data); 
       $.fancybox(data, { 
        closeClick : false, 
        helpers : { 
         overlay : { 
          closeClick : false 
         } 
        } 
       }); 

       alert(obj.result); 
      } 
     }); 
    } 
}// end reAssign 
+0

И вы уверены, что проблема не просто асинхронность, переменная 'reRank' выглядит ханкой! – adeneo

+1

Анализ данных JSON, который уже разобран, даст вам сообщение об ошибке. – adeneo

+1

Ну, все же, когда вы задаете тип данных jsonp, он уже разбирается, 'JSON.parse', вероятно, выдает ошибку. Узнайте, как использовать консоль (F12). – adeneo

ответ

0

Я предлагаю вам отследить запрос ajax через вкладку инструментов разработчика Network. Также добавьте следующее, чтобы отслеживать ошибки.

... 
error: function (error) { 
    console.log(JSON.parse(error)); 
} 
... 

Скорее всего, запрос будет терпеть неудачу из-за проблемы с сервером. Если это так, то success никогда не будет вызван, но complete (который вызывается всякий раз, когда запрос ajax завершается независимо от ошибки или без ошибок) всегда вызывается.

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