2010-10-14 3 views
19

Я использую JQuery, чтобы добавить поле формы в PHP файл, который просто возвращает 1/0 в зависимости от того, работает ли он или нет ...JQuery «Не удается прочитать свойство„DefaultView“неопределенной» ошибки

Экстракт код:

$.ajax({ 
    url: "ajax/save_text.php", //Relative?!? 
    //PHP Script 
    type: "POST", 
    //Use post 
    data: 'test=' + $(this).val(), 
    datatype: 'text', 
    //Pass value  
    cache: false, 
    //Do not cache the page 
    success: function(html) { 
     if (html == 1) { 
      $(this).hide().siblings('span').html($(this).value).show(); 
        alert("awesome!"); 
     } else alert('It didn\'t work!'); 
    }, 
    //Error 
    error: function() { 
     alert("Another type of error"); 
    } 
}); 

Однако каждый раз, когда он успешен (HTML == 1) консоль подбрасывает ошибку «Uncaught TypeError: не удается прочитать свойство„DefaultView“неопределенных» и тревога никогда не бывает ...?

У Google, похоже, нет большой информации об этой ошибке и jQuery, кто знает причину?

ответ

31

Это потому, что this не то, что вы имели дело с до того, что теперь тха ajax JQuery объект, добавьте context option of $.ajax() так:

$.ajax({ 
    context: this, 
    url: "ajax/save_text.php", 
    ... 

Таким образом this внутри ваших обратных вызовов относится к тому же this, как, когда вы звоните $.ajax(). В качестве альтернативы просто держите ссылку на this в отдельной переменной.

Кроме того, вам необходимо настроить $(this).value, возможно, вы имели в виду this.value или $(this).val().

+0

Огромное спасибо, глупая ошибка, я обещаю, что я поправляюсь :-) –

+1

@Pez - совсем не глупо, я думаю, что это довольно противоречиво, так как это не поведение контекста * default *. –

+0

Да, это просто немного меня, после немного рефакторинга. Спасибо за ответ. :) – Bombe

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