2013-03-13 4 views
2

У меня возникли проблемы с использованием функции JQUERY Post.Callback никогда не вызывал Jquery.post();

У меня есть 2 функции, которые вызывают функцию JQUERY Post. Оба они работают нормально, но функция обратного вызова никогда не вызывается (handleLike).

Когда я вызываю handleLike вручную, он отлично работает. (Даже если handleLike имеет только предупреждение внутри, функция обратного вызова не вызывается)

Не могли бы вы помочь мне с этой штукой?

<script type="text/javascript"> 
    $(document).ready(function() { 

     function handleLike(v_cb){ 


     alert("Call back chamou!"); 
     $('#erro').html(v_cb.mensagem); 

     if (v_cb.class == 'map'){ 
      var elemento = $('#maplike'); 
     }else{ 
      var elemento = $('#commentlike'+v_cb.id); 
     } 


     if (!(elemento.hasClass('disabled'))){ 

      elemento.addClass("disabled"); 
      var likes = elemento.find('font').text(); 
      likes++; 
      elemento.find('font').html(likes); 
     } 
     } 

     $('#maplike').click(function() { 

      //var map_id = $('#like').find('font').attr('value'); 

      var id = $(this).attr("name"); 




      if (!($(this).hasClass('disabled'))){ 

      var JSONObject= { 
       "mensagem":"Testando Json", 
       "id":86, 
       "class":"map" 
      }; 

      handleLike(JSONObject); 

      alert("Teste"); 

      $.post(
       '/cmap/maps/like', 
       { id: id }, 
       handleLike, 
       'json' 
      ); 
      } 
     }); 

     $('[id*="commentlike"]').click(function() { 

      //var map_id = $('#like').find('font').attr('value'); 

      var id = $(this).attr("name"); 


      if (!($(this).hasClass('disabled'))){ 

      $.post(
       '/cmap/comments/like', 
       { id: id }, 
       handleLike, 
       'json' 
      ); 


      } 
     }); 


    }); 

    </script> 
+1

Адрес электронной почты вашего звонка? Скорее всего, ваш вызов вашей функции обратного вызова - это вопрос –

+0

Успешно ли отправлен запрос ajax? Это может быть неудачным, поэтому почему ваш обратный вызов не запускается. –

+1

Скорее всего, ваш сервер не возвращает действительный json. Если вы использовали обработчик ошибок этих запросов, вы, вероятно, получите '' parseerror '' –

ответ

4

диагностических, не решение

Рационализации и добавление обработчика ошибок, вы должны получить что-то вроде этого:

$(document).ready(function() { 
    function handleLike(v_cb){ 
     alert("Call back chamou!"); 
     $('#erro').html(v_cb.mensagem); 
     var elemento = (v_cb.class && v_cb.class == 'map') ? $('#maplike') : $('#commentlike'+v_cb.id); 
     if (!elemento.hasClass('disabled')){ 
      var f = elemento.addClass("disabled").find('font'); 
      f.html(++Number(f.text())); 
     } 
    } 
    function ajaxError(jqXHR, textStatus, errorThrown) { 
     alert('$.post error: ' + textStatus + ' : ' + errorThrown); 
    }; 
    $('#maplike').on('click', function() { 
     var $this = $(this); 
     if (!$this.hasClass('disabled')) { 
      $.post('/cmap/maps/like', { id: $this.attr("name") }, handleLike, 'json').fail(ajaxError); 
     } 
    }); 
    $('[id*="commentlike"]').on('click', function() { 
     var $this = $(this); 
     if (!$this.hasClass('disabled')) { 
      $.post('/cmap/comments/like', { id: $this.attr("name") }, handleLike, 'json').fail(ajaxError); 
     } 
    }); 
}); 

непроверенной

Запрещая ошибки, есть Хороший шанс, что обработчик ошибок проинформирует вас о том, что происходит не так.

1

Я следую совету Kevin B и использую метод $ ajax.

Это был parseerror. Сожалею.

Возврат v_cb не был json, это был html. Я исправляю свое возвращение, и все в порядке.