【问题标题】:jQuery "Cannot read property 'defaultView' of undefined" errorjQuery“无法读取未定义的属性‘defaultView’”错误
【发布时间】:2021-02-14 06:09:00
【问题描述】:

我正在使用 jQuery 将表单字段发布到 PHP 文件,该文件仅返回 1/0,具体取决于它是否有效...

代码摘录:

$.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)控制台都会抛出错误

未捕获的类型错误:无法读取未定义的属性“defaultView”

警报永远不会发生...?

Google 似乎没有太多关于这个错误和 jQuery 的信息,谁知道原因?

【问题讨论】:

    标签: jquery ajax


    【解决方案1】:

    这是因为 this 不是您之前处理的对象,现在是 ajax jQuery 对象,像这样添加 context option of $.ajax()

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

    这样,回调中的this 与调用$.ajax() 时引用的this 相同。或者,只需在单独的变量中保留对 this 的引用。

    另外,您需要调整$(this).value,您的意思可能是this.value$(this).val()

    【讨论】:

    • @Pez - 一点也不傻,我认为这不是 默认 上下文行为,这也很违反直觉。
    • 是的,在经过一些重构之后,这也让我很生气。感谢你的回答。 :)
    • 同意这里,违反直觉,我也刚刚落入陷阱,我已经使用 JavaScript 8 年了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    相关资源
    最近更新 更多