- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这段代码有问题;返回值返回为“未定义”。有什么问题?
var fx = null;
xmlhttp.open("GET", URL ,false);
xmlhttp.onreadystatechange=function()
{
alert("enter func");
if (xmlhttp.readyState==4)
{
if (xmlhttp.status == 200)
{
alert(fx);
fx = xmlhttp.responseText;
return fx;
}
else
{
alert("Error" + xmlhttp.statusText);
}
}
}
较新的代码:
function getData(callback)
{
xmlhttp.open("GET", URL ,false);
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4)
{
if (xmlhttp.status == 200)
{
alert(xmlhttp.responseText);
cbfunc(xmlhttp.responseText);
}
else
{
alert("Error" + xmlhttp.statusText);
}
}
}
xmlhttp.send(null);
}
我是怎么调用它的:
getData( function cbfoo(txt)
{
//document.form.autodate.value=txt;
alert(txt);
alert(document.form.autodate.value);
});`
最佳答案
根据您的修改进行更新
function getData(callback)
{
// you should move the creation of xmlhttp in here
// so you can make multiple getData calls if needed
// if you keep xmlhttp outside the function the different calls to getData will interfere
// with each other
xmlhttp.open("GET", URL ,false); // false should be true, to make it async
...
{
alert(xmlhttp.responseText);
cbfunc(xmlhttp.responseText); // your function gets passed as the
// parameter "callback" but you're
// using "cbfunc" here instead of "callback"
...
getData(function cbfoo(txt) // you can omit the function name here
...
解决这些问题应该会使代码正常工作。
旧答案
您正在以同步 模式调用 XMLHttpRequest,这意味着它将阻止脚本直到请求完成,因为您正在分配 onreadystatechange
在阻塞调用之后回调(这意味着在请求已经完成之后)你的代码永远不会得到通知。
由于同步模式会阻塞脚本,也会阻塞浏览器的UI,所以不推荐使用这种模式。
您应该(对于 99% 的情况)使用异步模式并使用回调来处理数据,因为 xmlhttp.open
不 返回 onreadystatechange
回调的返回值,它只是在异步模式下运行时立即返回 undefined
。
现在一个常见的模式是为请求编写一个包装器并将一个匿名函数传递给这个包装器,稍后将在请求完成时回调它。
function doRequest(url, callback) {
var xmlhttp = ....; // create a new request here
xmlhttp.open("GET", url, true); // for async
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4) {
if (xmlhttp.status == 200) {
// pass the response to the callback function
callback(null, xmlhttp.responseText);
} else {
// pass the error to the callback function
callback(xmlhttp.statusText);
}
}
}
xmlhttp.send(null);
}
您现在可以发出请求并提供一个函数,该函数将在请求完成后立即调用,然后您可以在该函数内对响应执行任何您想做的事情。
doRequest('http://mysite.com/foo', function(err, response) { // pass an anonymous function
if (err) {
alert('Error: ' + err);
} else {
alert('Response: ' + response);
}
});
这是浏览器中的通用编程模型,始终采用异步解决方案,如果您阻止脚本,就会阻止整个浏览器。
关于javascript - Ajax responseText 返回为未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4672691/
我正在尝试使用 Ajax,并使用以下代码。 var r = new XMLHttpRequest(); r.open("POST", "pythonTesting.php", true); r.onr
我的 JSON.parse 有问题。在我将 API 调用从 request 更改为 request.Promise.get 后,我收到一个错误 - TypeError: Cannot read pro
我的代码- document.getElementById("lblmsg").innerHTML=xmlhttp.responseText; if(xmlhttp.r
在我的代码中,responseText 不工作。它应该显示,在文本框中输入的文本+“:您的请求已被syam看到” var xmlHttp
我正在尝试使用 Ajax 和 PHP 将数据插入数据库。现在的问题是 responseText 不返回任何消息,但插入成功完成这是我的脚本 function aa() {
我正在使用 ajax 从我的 php 解析器检索 json_encode() 数组。 响应文本为["4.wav","2.wav","3.wav","6.mp3","1.mp3","5.wav"] 如果
我玩得很开心 Redis 网盘 Dart 这是我写的 #import('dart:html'); #import('dart:json'); class ChatClient { XMLHttpR
我的 servlet 响应一个包含“false”或“true”的字符串=> Servlet 代码:out.println(validusername); validusername 是来 self 的
我正在使用 jquery get 来调用 ASP MVC Controller 。它返回部分 View 。即一堆 html 如果出现错误,我想为用户填充一些信息,但 ASP MVC 正在发送回整个页面
以下形式成功发送数据到MySQL db。但它无法显示 div 内的responseText .我怎样才能得到回复? First Name Password Ajax Respons
这让我很困惑。我有一个 url 数组(用于数据),我需要将其拉入页面并在全部加载后处理结果。我正在尝试使用 JQuerys Defered 功能来确保在处理结果之前所有 ajax 调用都已完成。一旦我
我无法将准确的字符串与我的 AJAX 脚本的结果进行比较。出于某种原因,我的 if 语句总是失败。通过删除 if 测试,我可以看到返回了正确的值(“成功”),但是当我保留它时,它的计算结果为 fals
我正在将我的表单数据发布到谷歌电子表格(它正在运行,但我无法收到回复)并试图返回已发送的值。电子表格有 3 个标题 - 名称、图像、结果。每当我发送表单数据时,我都可以在正确的标题下将值写入电子表格,
这个问题在这里已经有了答案: How do I return the response from an asynchronous call? (41 个回答) 关闭 5 年前。 我正在尝试使用 aj
我想在网页中显示在 ajax 请求的错误部分中我的 .NET 代码中引发的异常消息: [HttpPost] [AllowAnonymous] public virtual ActionResult A
这段代码有问题;返回值返回为“未定义”。有什么问题? var fx = null; xmlhttp.open("GET", URL ,false); xmlhttp.onreadystatechang
我是 JavaScript 新手。我需要测试 XMLHttpRequest.responseText 的输出在给定的 URL 上。最简单的方法是什么? var url = "http://m.goog
HTML 页面: xhr var xhr_test = new XMLHttpRequest(); xhr_test.open("
我会尽力解释我的问题,但说实话,我自己也有点困惑,所以我无法想象这对你们来说会容易得多。 对,我正在为我经常访问的网站的用户脚本创建一个脚本。我想做的是劫持任何ajax请求,我做得很好,然后修改res
如何拆分从数据库接收的 xmlhttp.responseText 逐行选择?我的数据库布局包含 3 列,我想将其移交给函数。 响应文本如下所示: 75px, 218px, foo, 12px, 13p
我是一名优秀的程序员,十分优秀!