相关疑难解决方法(0)

使用Google Geocode的回调函数

我几个小时以来一直在努力解决这个问题,即使在阅读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()返回上方,则返回的对象是正确的.任何帮助将非常感激.

javascript ajax asynchronous geocoding function

4
推荐指数
1
解决办法
8584
查看次数

Meteor Braintree - 通过Meteor方法创建客户端令牌

我正在努力让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 asynchronous braintree meteor

4
推荐指数
1
解决办法
732
查看次数

检查是否可以使用 JavaScript 访问在线资源,不需要同源策略允许它

我想检查是否可以使用 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: …

javascript http access-control

4
推荐指数
1
解决办法
2397
查看次数

将回调数据分配给变量

我一直试图弄清楚如何将值从回调设置为变量,以便我可以调用变量并访问数据,而不必将所有代码放在回调函数中.我发布了两个有效的示例,第二个有效,返回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

3
推荐指数
1
解决办法
1万
查看次数

从 reader.onload 事件返回变量

我正在通过读取数组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)

html javascript jquery fileapi

3
推荐指数
1
解决办法
8752
查看次数

如何使用webdriverio验证其是否为登录页面

我正在使用Javascript,webdriverio(v2.1.2)从内部站点执行一些数据提取.内部站点启用了SSO,因此如果我在其他应用程序上进行了身份验证,则无需登录此应用程序(在企业Intranet应用程序中很常见).我计划实现以下目标,

  • 创建具有所需功能的客户端
  • 传递所需的URL
  • 好玩:打印页面标题
  • 检查页面上是否存在元素.如果是,那么这是一个登录页面.如果没有,那么它不是登录页面

    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)

javascript selenium callback webdriver-io

2
推荐指数
1
解决办法
2808
查看次数

将JSON对象推入Array

我有一个函数,它获取一个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)

javascript jquery json

1
推荐指数
1
解决办法
3863
查看次数

通过回调从 onreadystatechange 返回值

我正在尝试从 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 …

javascript callback onreadystatechange

1
推荐指数
1
解决办法
5619
查看次数

如何在angular 8中将firebase jwt getIdToken发送到http get请求?

我正在使用 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)

javascript firebase firebase-authentication angular

1
推荐指数
1
解决办法
2913
查看次数

怎么来功能不等待另一个功能

我有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)

html javascript google-maps function

0
推荐指数
1
解决办法
1284
查看次数

如果我们从回调中返回他,为什么toJSON内的对象为null?(吃水线)

我有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,我无法返回他:(我怎么能解决这样的问题?

node.js sails.js waterline

0
推荐指数
1
解决办法
592
查看次数

等待节点js中函数或回调的返回值

我是节点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)

请帮我解决这个问题.

提前致谢

javascript callback node.js

-1
推荐指数
1
解决办法
3099
查看次数