2015-06-12 3 views
0

Я установил путевые точки для выполнения json post при запуске, однако веб-сервер никогда не получает запрос. Я получаю следующую ошибку jquery.Проблема с контекстом на jQuery waypoints post

TypeError: контекст Null http://mysite Line 5082

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

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

$(document).ready(function() { 
     $('.product_row').waypoint(getDisplayRow); 
}); 
function getDisplayRow() 
{ 
    var search_url = window.location.protocol + "//" + window.location.host + window.location.pathname; 
    var codes = []; 
    $(this.element).children().each(function() { 
     codes.push($(this).attr('product_id')); 
    }); 
    $.post('/ajax/getproductdisplayrow/', {codes: codes, 
     subcategory_url: $('#subcategory_url').val(), 
     category_url: $('#category_url').val(), 
     show_color_squares: $('#show_color_squares').val(), 
     search_url: search_url 
    }, function(data) { 
      $(this.element).before(data); 
      $(this.element).remove(); 
      adjustRowHeight(); 
    }); 
} 

Это не работает либо

$(document).ready(function() { 
     $('.product_row').waypoint(getDisplayRow); 
}); 
function getDisplayRow() 
{ 
    $.post('/ajax/getproductdisplayrow/', { 
    }, function(data) { 
    }); 
} 

У меня есть последняя версия путевых точек, а также JQuery

ответ

0

В обратном вызове к POST:

function(data) { 
    $(this.element).before(data); 
    $(this.element).remove(); 
    adjustRowHeight(); 
}); 

this больше не является экземпляром Waypoint. Я считаю, что это экземпляр jqXHR с поста. this.element возвращается не определено и кто знает, что происходит оттуда, когда вы пытаетесь позвонить before. Вы можете сохранить это свойство элемента в переменной внутри внешней функции и использовать его внутри обратного вызова POST:

function getDisplayRow() 
{ 
    var search_url = window.location.protocol + "//" + window.location.host + window.location.pathname; 
    var codes = []; 
    var $waypointElement = $(this.element); 
    $waypointElement.children().each(function() { 
    codes.push($(this).attr('product_id')); 
    }); 
    $.post('/ajax/getproductdisplayrow/', {codes: codes, 
    subcategory_url: $('#subcategory_url').val(), 
    category_url: $('#category_url').val(), 
    show_color_squares: $('#show_color_squares').val(), 
    search_url: search_url 
    }, function(data) { 
    $waypointElement.before(data); 
    $waypointElement.remove(); 
    adjustRowHeight(); 
    }); 
} 
+0

Спасибо за ответ. Я попробовал это. Я также попытался передать элемент в getDisplayRow. Это тоже не сработало. –

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