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

我需要将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); 

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

我从来没有尝试在$.ajax调用中使用@Url.Action (所以我不是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。

这不起作用的原因:

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

…是因为这部分是一个函数闭包 :

 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); }