我几个小时以来一直在努力解决这个问题,即使在阅读Stack上的几个例子之后我也无法实现这一点.我是JS的新手并没有帮助.
我正在尝试从Google Geocoder API检索有关地址的信息,然后将该对象传递给另一个函数.根据我的阅读,我理解我用来检索信息的函数是异步的,因此我需要使用回调函数来读取它.但是,当我尝试这样做时,我的控制台仍然会返回"未定义".我知道这些信息来自Google,因为当我在结果对象上使用console.log()时它会正确返回.
无论如何,这是我正在使用的:
function onSuccess(position) {
getLocationData(position, function(locationData) {
console.log(locationData);
});
}
function getLocationData(position, callback) {
geocoder = new google.maps.Geocoder();
var location = 'Billings,MT';
if( geocoder ) {
geocoder.geocode({ 'address': location }, function (results, status) {
if( status == google.maps.GeocoderStatus.OK ) {
return results[0];
}
});
}
callback();
}
Run Code Online (Sandbox Code Playgroud)
就像我提到的那样,我得到的只是'未定义'.如果我将'console.log(results [0])'放在getLocationData()返回上方,则返回的对象是正确的.任何帮助将非常感激.
我正在努力让Braintree Payments在Meteor应用程序中运行.我一直试图返回生成令牌(服务器端,通过Meteor方法)的结果,以便在客户端使用.
我试过这个:
/server/braintree.js
Meteor.methods({
createClientToken: function() {
var token = gateway.clientToken.generate({
customerId: this.userId
}, function(err, response) {
clientToken = response.clientToken
return clientToken
}
)
console.log(token)
return token
}
})
Run Code Online (Sandbox Code Playgroud)
返回true.
我也试过这个:
Meteor.methods({
createClientToken: function() {
var clientToken
gateway.clientToken.generate({
customerId: this.userId
}, function(err, response) {
clientToken = response.clientToken
}
)
console.log(clientToken)
return clientToken
}
})
Run Code Online (Sandbox Code Playgroud)
哪个回报undefined.
将function(err, response)被异步调用,是吗?如果是这样,那就是问题的解释.似乎尝试从异步函数返回值是Javascript中的一个痛点.我已经阅读了一些SO答案(就像这一个,这一个和这一个),但似乎没有一个让我朝着正确的方向前进.
另外,我相信我可能需要使用Meteor的wrapAsync方法,对吗?我已经试过这(发现这个和这个相关的等等吧题),但似乎仍不能得到正确的事情.
感谢任何反馈.
更新:
有关将Braintree与Meteor集成的工作方法,请查看 …
我想检查是否可以使用 JavaScript 函数访问服务器。
通过reachable,我的意思是,如果服务器应答,我不在乎哪个HTTP 状态代码,它是可达的。
Stackoverflow/Google 帮我实现了这个功能:
function check(target)
{
var xhr = new XMLHttpRequest();
var target = "https://"+target+"/index.php";
var num = Math.round(Math.random() * 10000);
xhr.open("HEAD", target + "?num=" + num, true);
xhr.send();
xhr.addEventListener("readystatechange", processRequest, false);
function processRequest(e)
{
if (xhr.readyState == 4)
{
if (xhr.status !== 0)
{
return true;
}
else
{
return false;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果目标允许与Access-Control-Allow-Origin: *(或特别是客户端)进行操作,则效果很好。但事实并非如此。
我遇到了许多解决方案,它们似乎都依赖于此。
如何Access-Control-Allow-Origin使用 JavaScript独立于服务器上的设置检查服务器是否可访问?
编辑:我只是想补充一点,我无法修改目标(例如更改标题),但我能够识别应该可用的资源(例如https://target/this-specific-site.php )
编辑2: …
我一直试图弄清楚如何将值从回调设置为变量,以便我可以调用变量并访问数据,而不必将所有代码放在回调函数中.我发布了两个有效的示例,第二个有效,返回undefined.我怎样才能使第二个例子有效?
这是我获取数据的地方.
var chromeApi = {
msg: function (callbacks) {
chrome.runtime.sendMessage({type: "settings"}, callbacks);
}
};
Run Code Online (Sandbox Code Playgroud)
当我从chromeApi这种方式访问数据时它工作正常.
chromeApi.msg(function (response) {
console.log(response);
});
Run Code Online (Sandbox Code Playgroud)
但我想以这种方式访问它我未定义.如何使我的代码能够使用此方法?
var test = chromeApi.msg(function (response) {
return response;
});
console.log(test);
Run Code Online (Sandbox Code Playgroud) 我正在通过读取数组JavaScript并将该数组的大小保存在 reader.onload 事件中。我认为该reader.onload函数在文件上传完成后被调用。
event.target.result存储该数组。我希望该数组保存为变量以在其他函数中使用,但是,我尝试初始化一个空数组并使用
slice
Run Code Online (Sandbox Code Playgroud)
功能,但是没有用。控制台返回一个未定义的值。
这是代码
<!DOCTYPE html>
<html>
<head>
<title> Home Page </title>
</head>
<body>
<input type="file" id="file" name="files[]" multiple/>
<output id="list"></output>
<p id="demo"></p>
<script>
function handleFileSelect(evt) {
// grab the file that was uploaded which is type File.
// evt is the event that was triggered
// evt.target returns the element that triggered the event
// evt.target.files[0] returns the file that was uploaded, type File
var file = evt.target.files[0];
var myArray = …Run Code Online (Sandbox Code Playgroud) 我正在使用Javascript,webdriverio(v2.1.2)从内部站点执行一些数据提取.内部站点启用了SSO,因此如果我在其他应用程序上进行了身份验证,则无需登录此应用程序(在企业Intranet应用程序中很常见).我计划实现以下目标,
检查页面上是否存在元素.如果是,那么这是一个登录页面.如果没有,那么它不是登录页面
login = function (username, password) {
if (!browserClientUtil) {
throw "Unable to load browserClientUtil.js";
}
browserClientUtil
.createClient()
.url(_Url)
.title(function (err, res) {
console.log('Title is: ' + res.value);
}) .isExisting('input#login_button.login_button', function (err, isExisting) {
browserClientUtil.getCurrentClient()
.setValue('input#USER.input', username)
.setValue('input#PASSWORD.input', password)
//.saveScreenshot('ultimatixLoginDetails.png')
.click('input#login_button.login_button')
.pause(100);
handlePostLogin();
});
Run Code Online (Sandbox Code Playgroud)
};
这是最好的方法吗?我试图在单独的函数中分离验证登录页面的代码,它不起作用,因为webdriver中的所有内容都作为回调的一部分发生,我不确定我是否以正确的方式执行此操作. 如何从回调中返回,这又是该函数返回的最终值?
login = function (username, password) {
if (!browserClientUtil) {
throw "Unable to load browserClientUtil.js";
}
browserClientUtil
.createClient()
.url(_Url)
.title(function (err, res) {
console.log('Title is: ' + res.value);
});
if(isThisLoginPage()){ …Run Code Online (Sandbox Code Playgroud) 我有一个函数,它获取一个Date并从JSON文件中读取事件.当Date置于事件的时间段内时,应将其添加到数组中,该数组应在函数末尾返回.
function getEvents(askDate) {
var askDate = new Date(askDate);
var result = new Array();
$.getJSON(EVENTS_JSON, function(data) {
$.each(data.events, function(key, entry) {
if(isInPeriod(askDate.setHours(0,0,0,0), new Date(entry.date[0]).setHours(0,0,0,0), new Date(entry.date[1]).setHours(0,0,0,0))) {
result.push(entry);
}
});
});
if(result.length === 0) {
result = false;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是我收到以下错误:"TypeError:result.push不是函数".
isInPeriod函数工作正常,以前我在result.push()之前有一个控制台输出,它是JSON对象.
JSON看起来像:
{
"events": [
{
"id": 1,
"name": "Example Event",
"date": [
"2014/11/25 07:30:00",
"2014/11/25 09:00:00"
],
"desc": "Lorem Ipsum sim dolor",
"image": "http://upload.wikimedia.org/wikipedia/commons/8/84/Example.svg",
"adress": "Example Road 12",
"youtube": "https://www.youtube.com/watch?v=_5DqL5-izAY",
"tags": [
"Example"
],
"categories": [ …Run Code Online (Sandbox Code Playgroud) 我正在尝试从 onreadystatechange AJAX 调用返回一个值...我找到了此页面:stackoverflow 链接。我虽然可以正常工作,但意识到添加或删除 fn 函数没有什么区别。以下代码有效:
username_is_available();
function username_is_available() {
var username = document.getElementById('username').value;
get_data('username', username, function(returned_value) {
if (returned_value == 'true') {
document.getElementById('username_err').innerHTML = 'Taken';
} else {
document.getElementById('username_err').innerHTML = 'Available';
};
});
}
function get_data(data_type, data, fn) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
fn(xmlhttp.responseText);
}
};
xmlhttp.open("GET", "availability.php?" + data_type + "=" + data, true);
xmlhttp.send();
}
Run Code Online (Sandbox Code Playgroud)
一切正常,但这不是我的目标,我想要一个函数 username_is_available() ,如果用户名确实可用,它返回 true 。相反,这里发生了一个操作(innerHTML …
我正在使用 angular 8 制作 SPA。
Firebase 用于在客户端和后端对用户进行身份验证,因此我需要将 http.get 请求中的 jwt 令牌发送到后端以对用户进行身份验证。
后端是使用 django 2.2 和 django rest 框架制作的 API,它发送要在客户端应用程序中使用的 api。
auth.service.ts
@Injectable({
providedIn: 'root'
})
export class AuthService {
userData: any; // Save logged in user data
public userToken: string;
constructor(
public afs: AngularFirestore, // Inject Firestore service
public afAuth: AngularFireAuth, // Inject Firebase auth service
public router: Router,
public ngZone: NgZone // NgZone service to remove outside scope warning
) {
/* Saving user data in localstorage when
logged …Run Code Online (Sandbox Code Playgroud) 我有2个函数,函数A调用函数B,它对地址进行地理编码并将LatLng对象返回给函数A,但不知何故,函数A不等待函数B从Google返回结果.
function A() {
var address = document.getElementById("txtbox").value;
//geocoding here
var here = B(address);
if (here == null) {
console.log("seems like geocode didn't work, defaulting value");
Run Code Online (Sandbox Code Playgroud)
在功能B中
function B(address) {
var here;
geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': address}, function(results, status) {
console.log("geocoding");
if (status == google.maps.GeocoderStatus.OK) {
console.log(results[0].geometry.location);
currentlatlng = results[0].geometry.location;
lng = currentlatlng.lng();
lat = currentlatlng.lat();
here = new google.maps.LatLng(lat, lng);
} else {
console.log("Geocode was not successful for the following reason: " + status);
}
}); …Run Code Online (Sandbox Code Playgroud) 我有TopPlayer模型:
module.exports = {
attributes: {
league_id: 'number',
playerid: 'number',
playerimage: 'url',
teamimage:'url',
teamname:'string',
season: 'string',
player: 'string',
assets: 'number',
goals: 'number',
toJSON: function() {
var obj = this.toObject();
Player.findOne({gs_id:obj.playerid}).done(function(err, player) {
obj.playerImage = player.image;
console(player.image);// everything is ok
return obj; // but this is returning null
});
}
}
};
Run Code Online (Sandbox Code Playgroud)
和toJSON总是返回null对象.我调试时创建了Player,但回调中的obj实例为null,我无法返回他:(我怎么能解决这样的问题?
我是节点js的新手,我正试图在这个节点js中设置一些变量
var perm1 = 0;
var perm2 = 0;
check_tasksAssigned(data,function(resp1) {
perm1 = resp1;
});
check_projectMembers(data,function(resp2) {
perm2 = resp2;
});
if(perm1 && perm2) {
// do some db stuff here
}
Run Code Online (Sandbox Code Playgroud)
但我得到的不确定.我也试过这样的,
var perm1 = check_tasksAssigned(data,function(resp1) {
});
var perm2 = check_projectMembers(data,function(resp1) {
});
if(perm1 && perm2) {
// do some db stuff here
}
Run Code Online (Sandbox Code Playgroud)
并尝试过这样,但结果在所有情况下都是一样的.
var perm1 = check_tasksAssigned(data);
var perm2 = check_projectMembers(data);
if(perm1 && perm2) {
// do some db stuff here
}
Run Code Online (Sandbox Code Playgroud)
请帮我解决这个问题.
提前致谢