我有一个函数,用var
关键字声明一个变量。然后,它将启动AJAX请求以设置变量的值,然后从函数中返回此变量。
但是,我的实现失败了,我也不知道为什么。
这是代码的简化版本;
function sendRequest(someargums) {
/* some code */
var the_variable;
/* some code */
request.onreadystatechange =
//here's that other function
function() {
if (request.readyState == 4) {
switch (request.status) {
case 200:
//here the variable should be changed
the_variable = request.responseXML;
/* a lot of code */
//somewhere here the function closes
}
return the_variable;
}
var data = sendRequest(someargums); //and trying to read the data I get the undefined value
AJAX请求是异步的。您的sendRuest函数正在执行,正在发出AJAX请求,但它是异步发生的;因此,sendRuest的其余部分在AJAX请求(和onreadystatechange处理程序)执行之前就已执行,因此the_variable
在返回时未定义。
有效地,您的代码如下工作:
function sendRuest(someargums) {
/* some code */
var the_variable;
/* some code */
return the_variable;
}
var data = sendRequest(someargums);
然后过了一段时间,您的AJAX请求已完成;但为时已晚
您需要使用一种称为回调的方法:
您以前可能曾经有过的地方
function () {
var theResult = sendRuest(args);
// do something;
}
你应该做:
function () {
sendRuest(args, function (theResult) {
// do something
});
};
并sendRuest
进行如下修改:
function sendRuest(someargums, callback) {
/* some code */
//here's that other function
request.onreadystatechange =
function() {
if (request.readyState == 4) {
switch (request.status) {
case 200:
callback(request.responseXML);
/* a lot of code */
//somewhere here the function closes
}
}
我想建立一个网站,使用客户端调用一个带有JavaScript的API。我不知道怎么做,所以我搜索了一下,发现了jQuery。然后我编写了我的函数来发出请求。它看起来如下所示: 这工作良好,print语句打印接收到的数据。但是如果我从另一个函数调用这个函数,它不会返回任何东西。每次都是未定义的。一个例子: 如果我运行这个,它会通过第二个print语句输出接收到的数据,但第一个总是返回“undefin
问题内容: 我想做的事情似乎很简单:通过 HTML 页面并从中提取一个值。 问题是 jQuery 拒绝解析返回的HTML。 同时,我正在玩的小提琴没有用,因此我无法提供其他可行的示例。 更新: 我的新提琴工作正常,但是似乎问题在于,在我的实际项目中,我试图解析大量复杂的HTML。这是一个已知问题吗? 问题答案: 您的代码工作正常。您只是没有正确使用jsFiddle的API。检查文档中的(http:
问题内容: 我一直在从jquery收到针对Ajax请求的“ parsererror”,我尝试将POST更改为GET,以几种不同的方式(创建类等)返回数据,但是我似乎无法弄清楚问题出在哪里。 我的项目在MVC3中,我使用的是jQuery 1.5,我有一个Dropdown,并在onchange事件上触发了一个调用,以基于所选内容获取一些数据。 下拉列表:(这会从Viewbag的列表中加载“ Views
问题内容: 我使用jquery发出ajax请求,这将调用以下spring控制器: 但是我收到以下错误: 如果需要,这里是我使用jQuery进行的ajax调用: 编辑 如果使用以下命令,则会出现相同的错误: 问题答案: 对于在家的观众…我发现问题是由于控制器中定义的方法签名与ajax调用不匹配。我从控制器方法中删除了参数。然后,我还意识到我还必须返回新的模型和视图。这是工作代码: 我更改为ajax调
问题内容: 我必须从控制器返回员工列表以响应jQuery AJAX请求。我应该怎么做? 我的控制器: 相关视图中的AJAX代码: 提前致谢。 问题答案: 在spring,当你需要对象序列化,反序列化和消息转换时。在这种情况下,你需要使用和注释控制器处理程序方法。 哪里: @ResponseBody:将通知spring尝试转换其返回值并将其自动写入http响应。 @RequestBody:将通知sp
对localhost的Ajax请求返回403错误。然而,当我更改controller requestMethod以获取并在浏览器上打开请求“url”时,它会显示从服务器返回的json数据。我希望使用这些数据填充一个下拉列表。请帮帮我。我正在使用spring security 4.0和spring MVC框架。CSRF未禁用。此外,该url在Spring得到保护。 我在这里查看了相关问题,但没有找到