通过函数返回值仍然有问题
Still Having Problems Returning Value Through Function
下面的函数有严重的问题:
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.
}
});
}
除了未定义的值之外,函数中没有任何输出,并且调试器中没有显示错误。我真的差点把我的笔记本电脑扔到墙上。如果有人能帮我做这个,请回答!
第一关:search_return
变量在哪里?你为什么忽略data
?
我有一种感觉,这就是你想要做的:
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;
}
问题在于,由于Ajax调用将在将来的任意时间完成,因此您不能简单地从其success
处理程序返回一个值。
一个问题是,您实际上没有对服务器返回的data
做任何事情,这似乎令人费解。
简单的版本是,你需要实现的功能作为success
回调的一部分。这可以内联完成,或者您可以在Ajax调用本身之外创建回调函数,并将其用作success
属性的值:
function onSuccess(data) {
// Do something with the data here
}
...
$.ajax({ // etc.
success: onSuccess
};
你也可以使用jQuery的$。当函数。
问题在于您试图从中返回关键字的范围。成功函数由jQuery调用,您无法控制jQuery如何处理返回值。你可以做return $.ajax(...
,但你不会得到你所期望的,因为根据文档:"作为jQuery 1.5, $.ajax()方法返回jqXHR对象,这是XMLHTTPRequest对象的超集"(http://api.jquery.com/Types/#jqXHR)。
你应该做的是建立一个回调函数:
function doSomethingWithKeywords(keywords) {
// do stuff
};
并在success函数中调用该函数:
doSomethingWithKeywords(keywords);
EDIT: Hogan's是一个很好的解决方案,因为您的调用不是异步的。
您遇到的问题是,您传递的返回不是函数的返回,而是成功事件的返回。在JavaScript中,通常使用闭包(隐含地将局部变量传递给函数)来解决这个问题。
NB我仍然不认为你的函数会起作用,因为我看不到search_return["keywords"]
的定义。但至少您不必担心关闭问题。一旦成功函数是正确的,主函数将返回它。
:
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;
}
- 为变量分配多个nodejs导出返回值时出现问题
- javasctipt-返回值的异步问题
- 从ID Jquery类获取返回值时出现问题
- 从表单javascript返回值时出现问题
- 存在从函数返回值的问题
- 谷歌图表,有问题地获取第一个和最后一个点的趋势线值
- (仍然)对JavaScript闭包,ajax和返回值有更多的困惑
- Javascript Date() 有时会返回错误的值
- “返回这个”的 JavaScript 函数的行为有问题
- 异步函数的 JavaScript 回调:是否有任何模式可以区分“返回值”和“异常”
- 返回值和 Promise.resolve 从 then() 有什么区别
- 一旦超时执行,清除或重新分配分配给 setTimeout 返回值的变量是否有任何技术点
- 使用jQuery自定义JS Confirm Modals.延迟和基于按钮的返回值问题
- Node.js:从内部有异步调用的函数返回值
- 有没有办法在javascript中获取返回值的类型
- 关于getTime()的返回值的问题
- 我的javascript函数返回值时出现问题
- 解析JSON有问题,从Facebook请求返回,javascript
- 有问题,获得一个复选框值与开关情况
- 通过函数返回值仍然有问题