почему я не могу определить внешнюю сторону функции с последующим =? - PullRequest
0 голосов
/ 11 июня 2019

код, который я пытаюсь запустить

<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>

<script> 
var http = new XMLHttpRequest();
var params = 'frashnum=&action=login&Frm_Logintoken="+results+"&Username=admin&Password=test';
var url = 'http://page/';
http.open('POST', url, true);
//Send the proper header information along with the request
http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');


 http.onload = function () {

let str = (http.responseText);
    alert(str)
    let pattern =/\bgetObj\("Frm_Logintoken"\)\.value = "([^"]+)";/;
    let results = console.log(str.match(pattern)[1]);
    return results;

 } 
 console.log(results);
http.send(params);
</script>
</body>
</html>

Я пытаюсь вернуть переменную результатов, чтобы использовать ее в Frm_Logintoken из параметров, но он говорит, что результаты не определены.где четко это определено ... поэтому я попытался удалить знак равенства перед функцией

, и эта часть тоже http.onload =, и это сработало, но остальная часть кода не ... так что естьКак это исправить?

Я уже попробовал много ответов на другие вопросы, но не работал для меня ... и я слишком новичок, чтобы понимать не очень хорошо Упрощенные ответы.

такпожалуйста, не упоминайте ссылки и не отмечайте их как дубликаты, просто ответьте

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

быстрое исправление будет меняться

http.open('POST', url, true);

в http.open ('POST', url, false);

сделать запрос синхронным. и вместо return results;

добавить результаты1 = результаты;

, а затем

console.log(results1);

должно работать .. а если не добавить, просто добавьте

var results1;

в начале кода

поэтому полный код должен выглядеть следующим образом

<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>

<script> 
var http = new XMLHttpRequest();
var url = 'http://page/';
var results1;
http.open('POST', url, false);
//Send the proper header information along with the request
http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');


 http.onload = function () {

let str = (http.responseText);
    alert(str)
    let pattern =/\bgetObj\("Frm_Logintoken"\)\.value = "([^"]+)";/;
    let results = console.log(str.match(pattern)[1]);
    results1 = results;

 } 
 console.log(results1);
var params='frashnum=&action=login&Frm_Logintoken='+results1+'&Username=admin&Password=test';
http.send(params);
</script>
</body>
</html>

и результаты в параметрах должны быть в Apostrophe, а не в двойных кавычках, поэтому он должен выглядеть так: 'results1'

0 голосов
/ 11 июня 2019

Изучите асинхронное поведение javascript.Ваша часть console.log (results) вызывается до получения ответа на вызов API.Проверьте Как я могу вернуть ответ от асинхронного вызова?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...