Javascript 仍然存在通过函数返回值的问题
我对以下功能有严重问题:Javascript 仍然存在通过函数返回值的问题,javascript,jquery,ajax,function,Javascript,Jquery,Ajax,Function,我对以下功能有严重问题: function requestUploadedSearch() { var cookie = JSON.parse(readCookie("user_search_cookie")); $.ajax({ dataType: "script", async: false, data: { context: "search
function requestUploadedSearch()
{
var cookie = JSON.parse(readCookie("user_search_cookie"));
$.ajax({
dataType: "script",
async: false,
data: {
context: "search-get",
code: removeNull(cookie, cookie !== null, "code")
},
success: function(data)
{
var keywords = search_return["keywords"];
return keywords; // here is the damn problem.
}
});
}
这意味着除了未定义的值之外,函数中没有任何内容,调试器中也不会显示任何错误。
我真的差点把我的笔记本电脑扔到墙上。
如果有人能帮我做这件事,请回答!
提前感谢。您遇到的问题是,您传递的返回不是函数的返回,而是成功事件的返回。在JavaScript中,通常使用闭包(隐含地将局部变量传递给函数)来解决这个问题 NB我仍然不认为您的函数会起作用,因为我看不到
search\u return[“关键字”]
是在哪里定义的。但至少你不必担心关闭问题。一旦成功函数正确,主函数将返回它
像这样:
function requestUploadedSearch()
{
var cookie = JSON.parse(readCookie("user_search_cookie"));
var returnClosure;
$.ajax({
dataType: "script",
async: false,
data: {
context: "search-get",
code: removeNull(cookie, cookie !== null, "code")
},
success: function(data)
{
// returnClosure = data["keywords"];
returnClosure = search_return["keywords"];
}
});
return returnClosure;
}
您遇到的问题是,您传递的返回不是函数的返回,而是成功事件的返回。在JavaScript中,通常使用闭包(隐含地将局部变量传递给函数)来解决这个问题 NB我仍然不认为您的函数会起作用,因为我看不到
search\u return[“关键字”]
是在哪里定义的。但至少你不必担心关闭问题。一旦成功函数正确,主函数将返回它
像这样:
function requestUploadedSearch()
{
var cookie = JSON.parse(readCookie("user_search_cookie"));
var returnClosure;
$.ajax({
dataType: "script",
async: false,
data: {
context: "search-get",
code: removeNull(cookie, cookie !== null, "code")
},
success: function(data)
{
// returnClosure = data["keywords"];
returnClosure = search_return["keywords"];
}
});
return returnClosure;
}
第一关:搜索返回的
变量在哪里?为什么要忽略数据
我觉得这就是你想要做的:
function requestUploadedSearch()
{
var cookie = JSON.parse(readCookie("user_search_cookie"));
var keywords;
$.ajax({
dataType: "json",
async: false,
data: {
context: "search-get",
code: removeNull(cookie, cookie !== null, "code")
},
success: function(data)
{
keywords = data["keywords"];
}
});
return keywords;
}
第一关:搜索返回的变量在哪里?为什么要忽略数据
我觉得这就是你想要做的:
function requestUploadedSearch()
{
var cookie = JSON.parse(readCookie("user_search_cookie"));
var keywords;
$.ajax({
dataType: "json",
async: false,
data: {
context: "search-get",
code: removeNull(cookie, cookie !== null, "code")
},
success: function(data)
{
keywords = data["keywords"];
}
});
return keywords;
}
问题是您试图从中返回关键字的范围。success函数由jQuery调用,您无法控制jQuery如何处理该返回值。您可以返回$.ajax(…
),但无法得到预期的结果,因为根据文档:“从jQuery 1.5开始,$.ajax()方法返回jqXHR对象,它是XMLHTTPRequest对象的超集”(http://api.jquery.com/Types/#jqXHR)
您应该改为设置一个回调函数,如:
function doSomethingWithKeywords(keywords) {
// do stuff
};
在success函数中调用该函数:
doSomethingWithKeywords(keywords);
编辑:Hogan是一个很好的解决方案,因为您的调用不是异步的。问题在于您试图从中返回关键字的范围。成功函数由jQuery调用,您无法控制jQuery使用该返回值做什么。您可以执行返回$.ajax(…
但您不会得到预期的结果,因为根据文档:“从jQuery 1.5开始,$.ajax()方法返回jqXHR对象,它是XMLHTTPRequest对象的超集”(http://api.jquery.com/Types/#jqXHR)
您应该改为设置一个回调函数,如:
function doSomethingWithKeywords(keywords) {
// do stuff
};
在success函数中调用该函数:
doSomethingWithKeywords(keywords);
EDIT:Hogan's是一个很好的解决方案,因为您的调用不是异步的。问题是,由于Ajax调用将在将来的任意时间完成,因此您不能简单地从其成功
处理程序返回值
一个问题是,您实际上没有对服务器返回的数据执行任何操作,这似乎令人费解
简而言之,您需要将该功能作为success
回调的一部分来实现。这可以在线完成,也可以在Ajax调用本身之外创建回调函数,并将其用作success
属性的值:
function onSuccess(data) {
// Do something with the data here
}
...
$.ajax({ // etc.
success: onSuccess
};
您也可以使用。问题在于,由于Ajax调用将在将来的任意时间完成,因此您不能简单地从其成功
处理程序返回值
一个问题是,您实际上没有对服务器返回的数据执行任何操作,这似乎令人费解
简而言之,您需要将该功能作为success
回调的一部分来实现。这可以在线完成,也可以在Ajax调用本身之外创建回调函数,并将其用作success
属性的值:
function onSuccess(data) {
// Do something with the data here
}
...
$.ajax({ // etc.
success: onSuccess
};
您也可以使用。您遇到了什么严重或其他问题?您是否使用JavaScript控制台来识别问题,是否报告了任何错误?此代码试图完成什么?什么不适合您?可能重复。重复是关于异步调用的,但基本问题是相同的:您我们从匿名函数返回,而不是从主函数返回。我们需要知道您遇到了什么问题。例如,在您的success
函数中,我看到您正在使用值search\u return
,但是您将数据
传递到函数中,并且不使用它。很抱歉,我保证我会编辑它。问题是m是:这个该死的函数什么都没有出来,什么都没有报告!一个未定义的结果只是出现在最后。你有什么问题,严重的还是其他的?你有没有使用JavaScript控制台来识别问题,有没有报告任何错误?这段代码试图完成什么。什么对你不起作用?可能重复的。duplicate是关于异步调用的,但基本问题是相同的:您是从匿名函数返回的,而不是从主函数返回的。我们需要知道您遇到了什么问题。例如,在success
函数中,我看到您使用的是search\u return
,但您将数据
传递到fu中N操作,不要使用它。很抱歉,我保证我会编辑它。问题是:这个该死的函数没有输出任何内容,也没有报告任何内容!未定义的内容只会出现在末尾。search\u return[“keyw