我正在尝试显示来自外部Javascript
的返回数据。
这是我的代码
全局functions.js
function CurrentDate() {
var url = CurrentDateUrl();
$.get(url, function (e) {
var Date = e.toString();
console.log(e);
console.log(Date);
return Date;
});
// RETURN the Current Date example. 11/29/2013 10:57:56 AM
}
Sample.cshtml(查看)
<h2>Transaction Date: <b><span id="TransactionYear"></span></b></h2>
<script>
function CurrentDateUrl(){
return '@Url.Action("CurrentDate", "Global")';
}
$(document).ready(function () {
var Date = CurrentDate();
document.getElementById("TransactionYear").innerHTML = Date; // the return is UNDEFINED
});
</script>
正如我们在global-functions.js
中看到的那样,没有问题,因为它从我想要的地方返回,但当我尝试调用函数CurrentDate()
时,它将返回 UNDEFINED 。有没有其他方式来展示它?或其他好方法?
编辑:
问题:您能否验证函数CurrentDate()是否被调用?
CurrentDate()
中返回硬编码字符串时,它将显示。我尝试了下面建议的答案
function CurrentDate() {
var url = CurrentDateUrl();
var result;
$.get(url, function (e) {
var date= e.toString();
console.log(e); // will return the Date in console
console.log(date); // will return the Date in console
result = date;
console.log(result); // will return the Date in console
});
console.log(result); // will return UNDEFINED in console
return "Sample";
}
输出
交易日期:样本
答案 0 :(得分:2)
我认为你以错误的方式使用$ .get()函数!有关详细信息,请参阅以下link。它不能返回值,它应该在请求完成时执行回调函数!
你应该在$ .get()(你正在做)中将函数作为回调函数传递,并在该函数中执行你想要的逻辑(你现在没做的那样)。
我宁愿这样做(在你的情况下可能不太好,因为你使用的是外部文件):
$.get(url, function (e) {
var Date = e.toString();
console.log(e);
console.log(Date);
document.getElementById("TransactionYear").innerHTML = Date
});
或者在你的情况下尝试这个(同步通话):
function CurrentDate() {
var url = CurrentDateUrl();
var result;
$.ajax({
url: url,
type: 'get',
async: false,
success: function(data) {
result = data;
}
});
return result;
}
请注意:我使用$ .ajax()并且我没有在$ .ajax中返回任何值。我还添加了 async:false 。现在您可以以这种方式返回结果,但它不是异步。
如果要使用异步请求,则必须使用回调函数。某些实现可能类似于以下示例:
function CurrentDate(callbackFunction) {
var url = CurrentDateUrl();
var result;
$.get(url, function (e) {
var Date = e.toString();
callbackFunction(Date);
});
}
// Call your function in code like this
CurrentDate(function(result) {
// handle your result here
});