2014-08-11 3 views
0

Я очень новичок в Ajax, и что-то, что я думал, будет очень легко, не работает. Чтобы упростить свою проблему, я пытаюсь заменить элемент списка с надписью «Hello» с одной поговорке «До свидания»:Мой синтаксис Ajax кажется неправильным

У меня есть HTML:

<ul> 
<li>Hello <div class="change">X</div></li> 
</ul> 

отдельный файл PHP («Substitute.php»)

<?php 
echo "<li>"; 
echo "Goodbye"; 
echo "</li>"; 
?> 

И в моем HTML файл, я пытаюсь сделать простой Ajax вызов, который я нашел в Интернете:

<script type="text/javascript"> 

$(document).ready(function() { 
$(".change").click(function() {     
$.ajax({url:"Substitute.php", success:function(result){ 
$(this).parent().html(result); 

}}); 
}); 
})  

</script> 

Это не работает. Если я избавлюсь от Ajax и просто сделаю $ (this) .parent(). Load ("Substitute.php"); он отлично работает. Тем не менее, мой php-файл на самом деле намного сложнее и связан с базой данных MySQL, поэтому мне определенно нужно сделать это через Ajax.

Может ли кто-нибудь сказать мне, что я делаю неправильно в синтаксисе Ajax? Большое спасибо.

ответ

0

Попробуйте этот код:

$(document).ready(function() { 
    $(".change").click(function() { 
     var element = $(this);     
     $.ajax({url:"Substitute.php", success:function(result){ 
     element.parent().html(result); 
     }}); 
    }); 
}) 

Пояснение: Вы обращались к $ (это) внутри функции обратного вызова вызова Ajax, ожидая, что это будет элемент DOM, который вы хотите обновить. В предлагаемом коде мы сохраняем элемент DOM, который мы хотим в переменной «element», используя закрытие и доступ к нему непосредственно из функции обратного вызова ...

+0

Perfect - Большое спасибо... – JohnG

0

Потому что в вашей функции успеха ajax объект this не ссылается на объект с щелчком. Таким образом, вам нужно сохранить объект с щелчком во временную переменную.

$(document).ready(function() { 
    $(".change").click(function() { 
     var obj = this; 
     $.ajax({ 
      url: "Substitute.php", 
      success: function(result) { 
       $(obj).parent().html(result); 

      } 
     }); 
    }); 
}) 
+0

FWIW, 'success' устарел из объекта jqXHR. Лучше использовать 'done' (' done: function (result) {...} '). ref: http://devdocs.io/jquery/jquery.ajax –

+0

Я думаю, что это в основном то же самое, что и у Виталия, над которым работает - спасибо очень большое спасибо – JohnG

0

Try, чтобы получить это в другом объекте и использовать replaceWith вместо html как вы получаете li от вашего Substitute page, в противном случае ваш HTML бы не непросроченный, в вашем случае вы получите li в другой li попробовать это,

$(document).ready(function() { 
    $(".change").click(function() { 
     var $that=$(this); 
     $.ajax({ 
      url: "Substitute.php", 
      success: function (result) { 
       $that.parent().replaceWith(result); 
      } 
     }); 
    }); 
}); 

Если вы не хотите, чтобы изменить код, replaceWith затем возвращать только текст из вашего PHP Page

+0

Спасибо Rohan - Мне действительно нужен html() для чего я но var var - это то, что мне нужно, чтобы заставить его работать, и многие из вас предложили его. (Не уверен, что я полностью понимаю объяснение, почему это было необходимо, но оно работает, поэтому спасибо!) – JohnG

+0

Это необходимо, потому что 'scope этого' находится внутри события click, но не в вашей функции обратного вызова« ajax success » –

0

Вы уверены, что вы включили файл jquery для поддержки ajax. ? попытайтесь предупредить что-то на событии Click, прежде чем вы выполните вызов ajax. Нравится

$(".change").click(function() { 
alert('jQuery Working.!!'); 
}); 

любезно проверьте, если вы получаете предупреждение. Позволяет отлаживать его один за другим.

+0

Спасибо Лоренцо - у меня был аякс в другом месте на моей странице, так что он работал (должен был сказать - извините). Однако кто-то исправил мою проблему. – JohnG

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