当我运行此代码时:
function SolveRecaptchaV2(APIKey, googleKey, pageUrl, proxy, proxyType){
var requestUrl = "https://2captcha.com/in.php?key=" + APIKey + "&method=userrecaptcha&googlekey=" + googleKey + "&pageurl=" + pageUrl + "&proxy=" + proxy + "&proxytype=";
switch (proxyType) {
case 'HTTP':
requestUrl = requestUrl + "HTTP";
break;
case 'HTTPS':
requestUrl = requestUrl + "HTTPS";
break;
case 'SOCKS4':
requestUrl = requestUrl + "SOCKS4";
break;
case 'SOCKS5':
requestUrl = requestUrl + "SOCKS5";
break;
}
console.log('here'); //this gets shown in console
$.ajax({url: requestUrl, success: function(result){
if(result.length < 3){
return false;
}else{
if(result.substring(0, 3) == "OK|"){
var captchaID = result.substring(3);
for(var i=0; i<24; i++){
var ansUrl = "https://2captcha.com/res.php?key=" + APIKey + "&action=get&id=" + captchaID;
var requests = $.ajax({url: ansUrl});
requests.done(function(ansresult){
console.log(ansresult); //This gets shown in console
if(ansresult.length < 3){
return ansresult;
}else{
if(ansresult.substring(0, 3) == "OK|"){
return ansresult;
}else if (ansresult != "CAPCHA_NOT_READY"){
return ansresult;
}
}
//await sleep(1000);
});
}
}else{
return 'not OK|';
}
}
},
fail: function(){
return "fail";
}
});
}
当我运行此代码时一切正常并且代码运行没有问题,但是当我在$ .ajax中使用异步函数进行回调函数时,$ .ajax似乎无法运行。这是不运行的代码:
function SolveRecaptchaV2(APIKey, googleKey, pageUrl, proxy, proxyType){
var requestUrl = "https://2captcha.com/in.php?key=" + APIKey + "&method=userrecaptcha&googlekey=" + googleKey + "&pageurl=" + pageUrl + "&proxy=" + proxy + "&proxytype=";
switch (proxyType) {
case 'HTTP':
requestUrl = requestUrl + "HTTP";
break;
case 'HTTPS':
requestUrl = requestUrl + "HTTPS";
break;
case 'SOCKS4':
requestUrl = requestUrl + "SOCKS4";
break;
case 'SOCKS5':
requestUrl = requestUrl + "SOCKS5";
break;
}
console.log('here'); //This still shows in console.......
$.ajax({url: requestUrl, success: function(result){
if(result.length < 3){
return false;
}else{
if(result.substring(0, 3) == "OK|"){
var captchaID = result.substring(3);
for(var i=0; i<24; i++){
var ansUrl = "https://2captcha.com/res.php?key=" + APIKey + "&action=get&id=" + captchaID;
var requests = $.ajax({url: ansUrl});
requests.done(async function(ansresult){
console.log(ansresult); //This does not show in console now.....
if(ansresult.length < 3){
return ansresult;
}else{
if(ansresult.substring(0, 3) == "OK|"){
return ansresult;
}else if (ansresult != "CAPCHA_NOT_READY"){
return ansresult;
}
}
//await sleep(1000);
});
}
}else{
return 'not OK|';
}
}
},
fail: function(){
return "fail";
}
});
}
注意第一个ajax调用之前的console.log和第二个ajax调用中的console.log。 ajax调用中的console.log没有出现......
答案 0 :(得分:0)
Hooray,您在jQuery中发现了一个错误。 https://github.com/jquery/jquery/issues/3596
它忽略了作为回调传递的异步函数,因为它无法识别它们。
console.log(jQuery.isFunction(()=>{})) // true
console.log(jQuery.isFunction(async ()=>{})) // false
function deferred() {
return $.ajax({url:"https://httpbin.org/ip"}); // returns a Deferred
}
async function native() {
return $.ajax({url:"https://httpbin.org/ip"}); // returns a native promise
}
function demo() {
deferred().then(async val=>console.log("doesn't work"));
native().then(async val=>console.log('works'));
}
demo();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
由于您正在撰写Chrome扩展程序,因此您绝对可以使用它支持的所有JavaScript。
写await $.ajax(…)
(或使用fetch),不要担心jQuery的回调。
举个例子:
async function demo() {
try {
let result = await $.ajax({url:"https://httpbin.org/headers"});
return result.headers['User-Agent'];
} catch (err) {
return 'fail';
}
}