Jquery ajax上下文没有按预期工作

时间:2013-04-22 09:01:52

标签: jquery

我有以下代码来执行和显示ajax请求。 在这里,我想将ajax returened html注入mainCanvas。尝试上下文“this”但不起作用。你能分享一些想法吗?

我也不想将上下文设置为“this.mainCanvas”因为我必须在其他元素中注入html。

    var RequestController = {
            mainCanvas: $("#mainCanvas"),   
            panelCanvas: $("#subDiv"),
            Start:function(){
                $.ajax({
                    url: "http://myserverurl.com",
                    context: this,
                    success:function(data){
                        this.mainCanvas.html(data);
                    }
                });
            }
    };

3 个答案:

答案 0 :(得分:1)

在渲染之前,您似乎正试图将html放入潜水中。在DOM完全加载时始终注入html。您可以在$(document).ready()函数中查看此内容。

答案 1 :(得分:1)

尝试这样的事情:

   created: function() {
    var vueInstance = this;
    $.ajax({
    url: urls.api.getStates,
    context: vueInstance,
    type: 'GET',
    success: function (response) {
        $.each(response, function (stateCodeId, name) {
            var stateObj = new Object();
            stateObj.id = stateCodeId;
            stateObj.name = name;
            vueInstance.states.push(stateObj);
        });
    },
    error: function (response) {
        console.log(response);
        $('#errorMsg').show();
        $("#errorMsg").focus();
        this.ErrorHeader = "Error(s)";
        this.ErrorMessage = "<li>An error occurred while retrieving the list of schools. Please try again later.</li>";
    }
})
}

刚刚花了半个小时处理这个问题,我知道线程已经老了但是我希望这对某人有所帮助!

答案 2 :(得分:0)

使用jQuery.proxy

var RequestController = {
    mainCanvas : $("#mainCanvas"),
    panelCanvas : $("#subDiv"),
    Start : function() {
        $.ajax({
                    url : "http://myserverurl.com",
                    context : this,
                    success : $.proxy(function(data) {
                                this.mainCanvas.html(data);
                            }, this)
                });
    }
};