javascript - 如何在 Ajax 调用中保留上下文

标签 javascript ajax jquery

我需要进行 Ajax 调用并让响应更新被单击以触发事件的 DOM 元素的子元素。示例 HTML:

<div class="divClass">
  <p class="pClass1">1</p>
  <p class="pClass2">Some text.</p>
</div>
<div class="divClass">
  <p class="pClass1">2</p>
  <p class="pClass2">Some text.</p>
</div>
<div class="divClass">
  <p class="pClass1">3</p>
  <p class="pClass2">Some text.</p>
</div>

示例 javascript 代码:

$(document).ready(function(){
    $(".divClass").each(
        function(e) {
            $(this).attr('divValue', $('p.pClass1', this).text());
            $('p.pClass1', this).text('?');

            $(this).click(function(e) {
                e.preventDefault();

                $.ajax({
                    type: "POST",
                    url: "ajax.php",
                    data: "val=" + $(this).attr('divValue'),
                    success: function(msg) {
                        myData = JSON.parse(msg);
                        $('p.pClass1', this).html(myData.results[0]); // problem exists here
                    }
                });
            });
        }
    );
});

在问题行中,“this”指的是 Ajax 响应对象。我不知道如何保留上面几行的“this”上下文,以便我可以使用 Ajax 调用的响应更新其内容。

最佳答案

有闭包!

$(document).ready(function(){
    $(".divClass").each(
        function(e) {
            $(this).attr('divValue', $('p.pClass1', this).text());
            $('p.pClass1', this).text('?');

            $(this).click(function(e) {
                e.preventDefault();

                // Store 'this' locally so it can be closed
                // by the function scope below
                var self = this;

                $.ajax({
                    type: "POST",
                    url: "ajax.php",
                    data: "val=" + $(this).attr('divValue'),
                    success: function(msg) {
                        myData = JSON.parse(msg);

                        // Now used your closed variable here
                        $('p.pClass1', self).html(myData.results[0]); // problem exists here
                    }
                });
            });
        }
    );
});

关于javascript - 如何在 Ajax 调用中保留上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1751147/

相关文章:

javascript - 如何制作像 Youtube 中那样具有标记功能的文本区域

javascript - 实例化 XMLHttpRequest 对象的最佳方法

javascript - 如何在javascript中使用preventDefault删除默认操作?

javascript - 使用通过 ajax 调用检索的数据绘制 Chart.js

javascript - 变量可以等于 if 语句中的两个东西吗?

javascript - 检查 JS 中的异步函数重入

javascript - Angularjs 如何生成 HTML 代码文档

javascript - AJAX 中的缓存结果

jquery - 使复选框引起 jQuery 验证

javascript - 如何检查用户并通过然后重定向