Javascript-通过ajax获取文本并显示在链接中

Javascript-通过ajax获取文本并显示在链接中,javascript,jquery,html,ajax,jquery-datatables,Javascript,Jquery,Html,Ajax,Jquery Datatables,用例:我想在HTML链接/锚中用省略号表示一些文本(例如,我的名字是…),其中文本通过ajax调用获取 每当用户单击链接时,我都会通过进行与获取文本相同的ajax调用(在模式对话框中)完全加载文本 代码如下: "aoColumns": [ <Some code for columns> {"mData": "id", sWidth:"180px","mRender": function ( data, type, full ) { var obj = JS

用例:我想在HTML链接/锚中用省略号表示一些文本(例如,我的名字是…),其中文本通过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>";
]
“aoColumns”:[
{“mData”:“id”,sWidth:“180px”,“mRender”:函数(数据,类型,完整){
var obj=JSON.parse(JSON.stringify(full));
JSRoutes.com.app.controllers.File.getContent(obj[“fileId”]).ajax({
数据:{},
成功:功能(数据){
log(“这是我想用省略号“+data”表示的数据);
}
});
返回“++”;
]
问题:如何进行ajax调用以获取文件内容并同时提供锚元素的文本。因为当我们“返回”时,ajax调用可能尚未完成


我可能没有成功地解释清楚这个问题,所以欢迎评论和问题来改进这个问题。

AJAX是异步的。因此,如果您想先完成某个任务,然后在第一个任务完成后才调用第二个函数,那么您必须用Javascript函数而不是CALI来编写它在jQuery中调用它。

ajax'中的第一个字母“a”代表async,这意味着您无法直接获得结果,但稍后会将结果提供给回调函数

在您的示例中:

JSRoutes....ajax({
    success: function(data){
                 // async callback
             }
});
success
函数将在ajax返回后执行

因此,您应该首先返回一个空的
元素,然后在回调中填充内容

例如:

var a = document.createElement('a');
JSRoutes......ajax({
    success: function(data){
                 a.textContent = data;
             }
});
return a;

最后,我在ajax函数成功回调中使用元素id修改文本

由于文件ID是唯一的,我可以提供唯一的HTML锚ID

"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>";
    }
]
“aoColumns”:[
{“mData”:“id”,sWidth:“180px”,“mRender”:函数(数据,类型,完整){
var obj=JSON.parse(JSON.stringify(full));
JSRoutes.com.app.controllers.File.getContent(obj[“fileId”]).ajax({
数据:{},
成功:功能(数据){
var linkText=“”;
var n=70;
如果(data.length>n){
linkText=data.substr(0,n)+“…”;
}否则{
链接文本=数据;
}
$('#file_'+obj[“fileId”]).text(linkText);
}
});
返回“id=file_389;”+obj[“fileId”]+“>”+“这将很快加载”+”;
}
]

你需要在success函数中编写
返回“…”
。@AminJafari:让我试试,我会更新这篇文章。谢谢!谢谢!我确实理解“A”JAX。这就是问题的原因。你能修改你的答案以包含document.createElement()吗在jquery中也附加onClick回调?我对javascript和jquery非常陌生,不知道如何做。使用
var a=Create元素$('以查找所需的函数。我检查了您的答案,但它似乎不起作用。原因:该函数只能将字符串返回到dataTables render属性。是否有一种方法可以在不使用javscript createElement的情况下返回html锚定字符串?您必须提供一种稍后修改内容的方法,并在ajax回调中调用该方法。没有o如您所述直接返回结果的方法,因为这是同步方法。我最终使用唯一ID在ajax回调中修改锚文本。感谢您的帮助!