使用案例:我想在HTML LINK /锚点中用省略号(例如我的名字是......)表示一些文本,其中文本由ajax调用获取。
每当用户单击链接时,我通过进行用于获取文本的相同ajax调用来完全在模式对话框中加载文本。
以下是代码:
"aoColumns": [
<Some code for columns>
{"mData": "id", sWidth:"180px","mRender": function ( data, type, full ) {
var obj = JSON.parse(JSON.stringify(full));
JSRoutes.com.app.controllers.File.getContent(obj["fileId"]).ajax({
data: {},
success: function(data) {
console.log("This is the data I want to represent in ellipsis: " + data);
}
});
return "<a>" + <HOW TO PUT CONTENT (data) HERE> +"</a>";
]
问题:如何进行ajax调用以获取文件内容并同时提供锚元素的文本。因为当我们'返回'时,ajax调用可能没有完成。
我可能没有成功地清楚地解释这个问题,所以欢迎提出意见和问题以改善这个问题。
答案 0 :(得分:1)
最后,我继续使用元素id在ajax函数成功回调中修改文本。
由于文件ID是唯一的,我可以提供唯一的HTML锚标识。
"aoColumns": [
<Some code for columns>
{"mData": "id", sWidth:"180px","mRender": function ( data, type, full ) {
var obj = JSON.parse(JSON.stringify(full));
JSRoutes.com.app.controllers.File.getContent(obj["fileId"]).ajax({
data: {},
success: function(data) {
var linkText = "";
var n = 70;
if (data.length > n) {
linkText = data.substr(0,n) + " ...";
} else {
linkText = data;
}
$( '#file_'+obj["fileId"]).text(linkText);
}
});
return "<a> id=file_" + obj["fileId"] + ">" + "This will be loaded soon" +"</a>";
}
]
答案 1 :(得分:0)
AJAX是异步的。所以如果你想先完成一些任务,只在第一个函数完成后调用第二个函数,而不是在Javascript函数中编写,而不是在jQuery中调用它。
答案 2 :(得分:0)
'ajax'中的第一个字母'a'代表 async ,表示您无法直接获得结果,但结果将在稍后提供给您的回调函数。
在你的例子中:
JSRoutes....ajax({
success: function(data){
// async callback
}
});
这个success
函数将在ajax返回后执行。
因此,您应该首先返回一个空的<a>
元素,然后在回调中填充内容。
示例:
var a = document.createElement('a');
JSRoutes......ajax({
success: function(data){
a.textContent = data;
}
});
return a;