Nano Hash - криптовалюты, майнинг, программирование

как получить доступ к функции обратного вызова успеха $(this) внутри ajax

Кажется, я не могу получить доступ к $(this) внутри функции успеха jquery ajax. пожалуйста, смотрите код ниже.

 $.ajax({
   type: 'post',
   url: '<?php echo site_url('user/accept_deny_friendship_request')?>',
   data: 'action='+$action+'&user_id='+$user_id,
   success: function(response){
     //cannot access $(this) here $(this).parent().remove();
   }
 });
15.04.2010

Ответы:


1

Каким должно быть $(this)? Если у вас есть ссылка на нее вне этой функции, вы можете просто сохранить ее в переменной.

$('#someLink').click(function() {
    var $t = $(this);
    $.ajax( ... , function() {
        $t.parent().remove();
    });
}
15.04.2010
  • что, если вы не можете добавить переменную, потому что она обернута в такую ​​функцию, как: $('.fileupload').fileupload({ dataType: 'json', start: {} ... etc 16.02.2017
  • так должно быть $('.fileupload')? Если да, то: var $t = $('.fileupload').fileupload(...) 16.02.2017

  • 2

    Проверьте вариант контекста - отлично работает для меня:

    $.ajax({
        context: this,
        type: 'post',
        url: '<?php echo site_url('user/accept_deny_friendship_request')?>',
        data: 'action='+$action+'&user_id='+$user_id,
        success: function(response){
           //can access this now!
        }
    });
    
    05.10.2012
  • Я согласен, что это правильный выбор в соответствии с документацией. По моему опыту, я не смог использовать контекстное решение при использовании $.post вместо $.ajax. Выдает ошибку: Uncaught TypeError: Illegal invocation. Я запускаю jQuery v1.11.3 и понимаю, что ошибка вызова связана с вызываемой функцией прототипа, но не смог ее исправить даже после обнаружения строки, которая взрывалась. Кажется, это еще одно различие между $.post и $.ajax. Использование переменной, имеющей область действия над функцией, было рабочим решением в этой конкретной ситуации. 18.03.2016

  • 3

    Если вы хотите, чтобы this было this в контексте вашего вызова ajax, вы также можете использовать .bind() следующим образом:

    $.ajax({
      url: 'some_url'
      success: function(data) {
        // do something 'this'
      }.bind(this)
    })
    

    Он связывает значение this внутри обратного вызова успеха с this снаружи.

    12.06.2015

    4

    Попробуйте вызвать $.proxy, чтобы изменить область действия this внутри функции:

    $.ajax({
        success: $.proxy(function(response) { $(this).parent().bla(); }, $(this));
    });
    
    15.04.2010

    5

    Я не вижу, чтобы $(this) ссылался на что-либо, но более простым способом было бы дать элементу класс или идентификатор и сослаться на него из jquery:

    Вместо:

    $(this).parent().remove();
    

    Вы можете сделать:

    $('#element_id').parent().remove();
    

    Примечание. Здесь я предполагаю, что вы имеете дело с одним элементом/итерацией.

    15.04.2010
  • Я не включил код, на который ссылается $(this). но это будет что-то вроде ниже $('#element_id').click(function(){$.ajax({...})}); 16.04.2010
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..