为啥我不能使用 jquery 访问 ajax 拉取的内容 [重复]

Posted

技术标签:

【中文标题】为啥我不能使用 jquery 访问 ajax 拉取的内容 [重复]【英文标题】:Why cant i access ajax pulled content with jquery [duplicate]为什么我不能使用 jquery 访问 ajax 拉取的内容 [重复] 【发布时间】:2013-01-13 10:35:06 【问题描述】:

可能重复:Use variable outside the success function from an ajax/jquery call

我有这段代码,但我不明白为什么 html 元素的访问只能在 ajax 成功函数内部工作。无论哪种方式,表单都是从 ajax 拉入的,但只有当我将所有对它的元素的选择放在 ajax 函数中时,我才能访问它。

console.log('submit clicked'); 以这种方式触发,但在“ajax 成功”内部,我认为使用 ajax 引入的所有内容都是 DOM 的一部分?

jQuery(document).ready(function($) 

console.log('ready');

$.ajax(
    type: 'GET',
    url: 'admin-ajax.php',
    data:  action: 'get_arve_form' ,
    success: function(response)
        // var table = $(response).find('table');
        $(response).appendTo('body').hide();
        console.log('response');

                    [ if i move the code below this ajax function in here its workign fine why not outside of it?]

    
);

// handles the click event of the submit button
$('#mygallery-submit').click(function()
    console.log('submit clicked');
                [...]
        );

【问题讨论】:

如果您发布了“不起作用”的代码并解释了具体不起作用的代码,这将有所帮助。 @AaronKurtzhals 我确实做到了! 【参考方案1】:

Ajax 是异步的,因此您的元素在 ajax 调用完成之前不存在。

话虽如此,有两种方法可以解决它:

1) 将您的代码移动到成功处理程序中

2) 使用事件委托将您的事件处理程序绑定到所有当前和未来元素。

#2 的一个例子:

$(document).on('click', '#mygallery-submit', function()
    console.log('submit clicked');
);

查看jQFundamentals,了解有关事件委托的更多信息。

【讨论】:

所以应该是这样的,好吧我学到了一些东西。我想我现在把它移到成功里面【参考方案2】:

这就是 ajax 的工作原理。 加载外部页面时,您可以在成功处理程序上使用它。 如果您希望它在其他地方可用,则必须以某种方式保存它,就像您正在做的那样。

但是,.click 函数在 ajax 调用返回成功之前执行。当您选择 $('#mygallery-submit') 时,它很可能是空的(您可能通过 ajax 加载它)。因此,如果您想在文档就绪时声明 click 函数,而不是在加载 ajax 页面时声明,您必须使用 .on 函数:

$('body').on('click', '#mygallery-submit', function() 
    console.log('submit clicked');
);

【讨论】:

【参考方案3】:

因为.click() 不是委托处理程序。如果您尝试将事件绑定到的元素在执行时不存在,则不会绑定该事件。请改用.on()

$('body').on('click', '#mygallery-submit', function() 
    // etc.
);

【讨论】:

以上是关于为啥我不能使用 jquery 访问 ajax 拉取的内容 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

JQuery 中ajax请求为啥总不到后台 浏览器可以正常访问后台 求解!!!

为啥不能将父ajax调用的参数访问到子ajax调用中

为啥使用jQuery时不能通过window对象访问对象?

django为啥不能实现ajax

jQuery.ajax为啥不能实现return值

为啥这个 jQuery AJAX PUT 可以在 Chrome 中工作,但不能在 FF 中工作