Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将$.get的结果传递给另一个函数的返回_Javascript_Jquery_Ajax_Promise - Fatal编程技术网

Javascript 如何将$.get的结果传递给另一个函数的返回

Javascript 如何将$.get的结果传递给另一个函数的返回,javascript,jquery,ajax,promise,Javascript,Jquery,Ajax,Promise,我在回调jquery$.get()ajax函数时遇到问题。 我正在使用DataTables插件并尝试“扩展行以查看子级详细信息”示例(可以在这里看到)。问题是这行: row.child(格式(row.data()).show() 函数format()从前端呈现html direct rom,如图所示: function format ( d ) { // `d` is the original data object for the row return '<table cellpaddi

我在回调jquery$.get()ajax函数时遇到问题。
我正在使用DataTables插件并尝试“扩展行以查看子级详细信息”示例(可以在这里看到)。问题是这行:
row.child(格式(row.data()).show()
函数format()从前端呈现html direct rom,如图所示:

function format ( d ) {
// `d` is the original data object for the row
return '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">'+
    '<tr>'+
        '<td>Full name:</td>'+
        '<td>'+d.name+'</td>'+
    '</tr>'+
    '<tr>'+
        '<td>Extension number:</td>'+
        '<td>'+d.extn+'</td>'+
    '</tr>'+
    '<tr>'+
        '<td>Extra info:</td>'+
        '<td>And any further details here (images etc)...</td>'+
    '</tr>'+
'</table>';
}
有没有一种使用回调的方法?还是不可能

注意

您的数据获取程序
foo()
返回承诺。只有当数据到达并且承诺得到解决时,才能对数据执行任何操作

您尝试的问题是,正如所写,
format()
返回
未定义的
,并且无法使其返回所需的
结果。这就是异步的本质。最好的方法是返回由
foo()
返回的承诺,但是这对您没有好处,因为(如您所知)您希望在
oTable.fnOpen(…)
调用中得到结果,而不是结果的承诺

解决方案是在outide上使用异步
foo(…)
,在内部使用
oTable.fnOpen(…)
将整个表达式翻转过来

最简单的代码形式是:

foo(id).then(function(result) {
    return oTable.fnOpen(nTr, result, 'well hiddenRow');
});
但您还应该包括一些错误处理:

foo(id).then(function(result) {
    return oTable.fnOpen(nTr, result, 'well hiddenRow');
}, function(jqXHR, textStatus, errorThrown) {
    return errorThrown;
});
并且,假设此代码本身在某个外部函数中,那么您应该返回由整个链生成的承诺

function open(id, nTr) {
    return foo(id).then(function(result) {
        return oTable.fnOpen(nTr, result, 'well hiddenRow');
    }, function(jqXHR, textStatus, errorThrown) {
        return errorThrown;
    });
}
这将反过来允许对
open()
过程的成功/失败采取适当的措施

open(id, nTr).then(function(rowNode) {
    //foo() returned a result and oTable.fnOpen() was called. 
}).fail(function(error) {
    //Something went wrong.
    console.log(error);
});

为什么不将
oTable.fnOpen
放在
done
回调中?@Alfonso Garnett这很好,我真的很感激,但我在另一个脚本中遇到了类似的问题,您的答案无法适用。并不是说这个答案没有用,而是罗默给出了一个真正澄清承诺本质的答案。不管怎样,谢谢你,你不仅回答了我的问题,而且还向我澄清了承诺本身的性质,我希望这个答案对其他人有用,对你的解决方案进行了测试,效果很好,谢谢。@maikoORD,很高兴能帮上忙。谢谢你的评论。
function open(id, nTr) {
    return foo(id).then(function(result) {
        return oTable.fnOpen(nTr, result, 'well hiddenRow');
    }, function(jqXHR, textStatus, errorThrown) {
        return errorThrown;
    });
}
open(id, nTr).then(function(rowNode) {
    //foo() returned a result and oTable.fnOpen() was called. 
}).fail(function(error) {
    //Something went wrong.
    console.log(error);
});