将ajax $ get()放入javascript变量中

时间:2011-08-03 00:41:57

标签: asp.net-mvc-3 jquery razor

我需要将ajax get的结果放入javascript变量中。

以下作品

$.get('@Url.Action("_Edit", "News", null)/' + guid_News, function (html)
{
    $("#divEdit").html(html);
});

这不起作用

var editHtml = "";
$.get('@Url.Action("_Edit", "News", null)/' + guid_News, function (html)
{
    editHtml= html;
});
$("#divEdit").html(editHtml);

还试过

var editHtml = "";
editHtml = $.get('@Url.Action("_Edit", "News", null)/' + guid_News, function (html)
{
    return html;
});
$("#divEdit").html(editHtml);

我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:2)

这不起作用的原因:

var editHtml = "";
$.get('@Url.Action("_Edit", "News", null)/' + guid_News, function (html)
{
    editHtml= html;
});
$("#divEdit").html(editHtml);

...是因为这部分是function closure

function (html)
{
    editHtml= html;
}

它不会立即执行,也不会阻止执行后面的语句。它将在服务器返回对请求的响应时执行,但到那时,您的$("#divEdit").html(editHtml);语句已经执行,editHtml设置为空字符串。

这应该有效:

var editHtml = "";
$.get('@Url.Action("_Edit", "News", null)/' + guid_News, function (html) {
    editHtml= html;
    setDivHtml();
});

function setDivHtml() {
    $("#divEdit").html(editHtml);
}

答案 1 :(得分:1)

我从未尝试在@Url.Action调用中使用$.ajax(所以我不是100%确定它有效),但您可以尝试使用它,因为它为您提供了更细粒度的方法ajax请求。在success回调中,您可以

$.ajax({
    url: '@Url.Action("_Edit", "News", null)/' + guid_News,
    type: 'GET',
    //async: false,
    success: function(data) {
        $('#divEdit').html(data);
    }
});

$.ajax选项甚至接受一个名为async的参数,您可以根据@ aroth的答案中的评论将其设置为false。