从.ajax调用返回html
当我尝试通过回调函数返回html时,由于某种原因我得到了未定义:
function getDataFromUrl(urlWithContent) { // jQuery async request $.ajax( { url: urlWithContent, dataType: "html", success: function(data) { return $('.result').html(data); }, error: function(e) { alert('Error: ' + e); } }); }
我知道我正在收回数据,我在响应中的firebug中看到它,当我提醒数据时,我看到整个页面内容出现在警报框中。
当我调用我的函数时,我正在执行以下操作:
var divContent = getDataFromUrl(dialogDiv.attr("href")); if(divContent) dialogDiv.innerHTML = divContent;
当我提醒divContent(在if语句之前)我没有被定义。 也许我只是因为我如何返回数据而错了?
我也尝试过返回数据; 同样的事情,当设置为我的变量时,在调用此方法后我得到了未定义。
每个回复更新:
试过这个,仍然未定义:
function getDataFromUrl(urlWithContent, divToUpdate) { $.ajax( { url: urlWithContent, aSync: false, dataType: "html", success: function(data) { divToUpdate.innerHTML = data; }, error: function(e) { alert('Error: ' + e); } }); }
我从另一个函数中调用它,如下所示:
var divContent = ""; if (dialogDiv.attr("href")) { getDataFromUrl(dialogDiv.attr("href"), divContent); }
您无法从回调中返回数据 – 因为无法保证在函数退出时数据将从函数返回(因为它是异步调用)。
您需要做的是更新回调中的内容,例如:
success: function(data) { $('#dialogDiv').html(data); },
您的对话框DIV
附加了id="dialogDiv"
。
我认为您还可以修改您的函数,以便在调用完成时使对象更新,如下所示:
function getDataFromUrl(urlWithContent, divToUpdate) { // jQuery async request $.ajax( { url: urlWithContent, dataType: "html", success: function(data) { divToUpdate.innerHTML = data; }, error: function(e) { alert('Error: ' + e); } }); }
然后像这样调用它(其中dialogDiv
是代表要更新的DIV
的对象,就像在你的例子中一样。)
getDataFromUrl(dialogDiv.attr("href"), dialogDiv);
ajax调用以异步方式运行。 因此,在ajax调用完成之前,函数会返回(通过从块的末尾删除)。 你有两种方法来处理这个问题。 添加aSync: false
选项以强制ajax调用同步运行或使用可在ajax调用完成时执行的函数回调。 我更喜欢后者。
function setDataFromUrl(urlWithContent,callback) { // jQuery async request $.ajax( { url: urlWithContent, dataType: "html", success: function(data) { callback(data); }, error: function(e) { alert('Error: ' + e); } }); } setDataFromUrl(dialogAnchor.attr("href"), function(data) { dialogDiv.html(data); });
甚至更好,除非你在很多地方分享这个代码:
var dialogDiv = $('div.dialog'); var dialogAnchor = dialogDiv.find('a'); // jQuery async request $.ajax( { url: dialogAnchor.attr('href'), dataType: "html", success: function(data) { dialogDiv.html(data); }, error: function(e) { alert('Error: ' + e); } });
为什么不尝试这个:
function getDataFromUrl(urlWithContent) { // jQuery async request $.ajax( { url: urlWithContent, dataType: "html", success: function(data) { $('#dialogDiv').html(data); }, error: function(e) { alert('Error: ' + e); } }); }
只需调用该函数,而不是将其分配给任何变量。
HTH