2011-08-03 20 views
0

我需要將ajax的結果放入一個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); 

我怎樣才能得到它的工作?

回答

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的答案。

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

你知道我如何使它同步並獲得變量中的值嗎? –

+1

@Valamas - 是的,請查看[jQuery.ajax](http://api.jquery.com/jQuery.ajax/)的文檔。你只需要用'.ajax()'替換你的'.get()',並將'async'選項設置爲'false'。 – aroth

+0

+1解釋爲什麼它不起作用 – Ahmad

相關問題