2014-11-07 2 views
0

это мой код на стороне сервера:Почему возвращаемая стоимость AJAX почти мгновенно исчезает?

modify_emp.php

<?php 
    echo $_POST[id]; 
?> 

И это мой Javascript в моем HTML страницы:

<script> 

    $(document).ready(function() { 

    var alreadyClicked = false; 

    $('.element').hover( 
    //mouseenter function 
    function(){ 
     $('.element').click(
      function(){ 
      $(this).css("color","blue"); 
      var objName = $(this).attr('name'); 
      var objColumn = $(this).attr('id'); 
      if(!alreadyClicked){ 
       alreadyClicked = true; 
       $(this) 
       .prepend('<form method="POST" class="newInput"><input type="text" name="newInput" style="width:140px"></input></form>'); 
       var elemento = $(".newInput"); 
       var position = elemento.position(); 
       $(".newInput").css({ 
        'position': 'absolute', 
        'top': position.top + 15, 
        'opacity':0.9, 
        'z-index':5000, 
       }) 
       .focus(); 
       //on enter keypress 
       $(document).keypress(function(e) { 
        if(e.which == 13) { 

         $.ajax({ 

          url: 'modify_imp.php', 
          type: 'post', 
          data: { id : objName, column : objColumn }, 
          success: function(data, status){ 
           $("#debug").html(data); 
          } 

         }); 
        } 
       }); 
      } //if (!alreadyClicked) end 
     }); //end mouseenter function 
    }, 
    //mouseleave function 
    function() { 
    alreadyClicked = false; 
    $(this).css("color","red"); 
    $(".newInput").remove(); 
    } 
); //end .hover 

});

debug является <div id="debug"> </div> в конце моей HTML страницы, на которой я хочу показать мой ответ от сервера. Когда я нажимаю «ENTER», я могу увидеть значение для 0.1s внутри этого div, но затем оно исчезает.

Я уже пытался передать возвращаемое значение локальной или глобальной переменной, но это не сработало. По какой-то причине значение внутри response теряется после 0,1 с, даже если я передаю его другой переменной в другом месте.

Может кто-нибудь объяснить мне, почему и как я могу «хранить» ответ сервера?

EDIT: Просто отредактирован мой весь <script>

+5

'return' - зарезервированное слово. try 'reservedData' – 1252748

+0

Да, извините, что это не« возврат »в моем действительном коде, я просто трансформировал на английском свой код, чтобы вы могли лучше понять. Я не думаю, что это проблема. Я просто изменил его с помощью «ответа». – Notash

+0

Вы устанавливаете обработчик клика внутри обработчика зависания. Это означает, что при каждом перемещении мыши над элементом он добавляет больше копий обработчика кликов. Таким образом, после того, как вы наведете указатель мыши на 10-й раз, будет 10 копий обработчика кликов; когда вы нажмете, он попытается запустить все эти вещи 10 раз, за ​​исключением того, что большинство из них будет выполняться только один раз, потому что 'ужеClicked' будет' true'. Это требует излишнего объема памяти и мощности процессора. Обработчик кликов должен быть установлен за пределами обработчика hover; обработчик зависания может быть пустым. –

ответ

1

Поскольку вы видите результат на мгновении, я собираюсь догадка, что у вас есть элемент формы на странице и когда вы нажмете возвращения, он на самом деле представление форма. Вы вкратце видите результат операции ajax, а затем ваша форма отправляет сообщение о перезагрузке страницы в качестве новой пустой страницы. Это распространенная проблема и всегда имеет эти же симптомы.

Вы можете удалить элемент формы или заблокировать отправку формы по умолчанию с помощью javascript.

Если вы покажете нам больше своего фактического HTML, мы могли бы более конкретно помочь в том, как предотвратить отправку формы.

+0

Да, этот код связан с формой! Мне нужен элемент формы, так как я могу «заблокировать отправку формы по умолчанию»? – Notash

+0

@Notash - покажите нам соответствующий HTML-код.Вы можете создать обработчик 'onsubmit' для формы и вернуть' false' из этого. – jfriend00

+0

Я только что редактировал свой основной пост с помощью всего моего javascript, форма создается динамически под нажатым элементом – Notash

0

Другим способом было бы назначить кнопку для запуска Аякса, и установить кнопку вне ФОРМЕ

0

Вы можете решить эту проблему путем вызова функции в виде тега т.е.

<form action="javascript:AnyFunction();">

Ваш код отправляется

.

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