Пытаюсь сделать программу, дождаться возвращения из запроса с помощью jQuery.
У меня есть программа, которая должна получать свежие данные каждый раз, когда нажимается кнопка, а затем использовать эти данные для продолжения выполнения. Я прочитал тонну предложений, но ни одно из них, похоже, не работает, так что я, должно быть, делаю что-то не так. Это вызывающая функция:
function _onSpin(iNumBettingLines,iCoin,iCurBet) { if(iCurBet > s_aSession["iMoney"]){ _dieError("INVALID BET: "+iCurBet+",money:"+s_aSession["iMoney"]); return; } makeNextResult(s_aSession["user_name"],s_aSession["coin_bet"],s_aSession["coin_bet"]); responce_string = getNextResults(); _Result = []; var res_string = parseResult(response_string); var incomming = res_string.split("#"); var this_ln; var x = 0; var bFreespin = 0; var bBonus = 0; var reel_pos; var bet_amt = 25; for(i=0;i<=incomming.length-1;i++){ this_ln=incomming[i].split(","); _Result[i]=this_ln; } } _initSettings(); //$(s_oMain).trigger("bet_placed",{bet:iCoin,tot_bet:iCurBet}); var rls; for(a=0;a<=_Result.length-1;a++){ if(_Result[0][0]==bet_amt){ rls = _Result[0][3]; break; } } if(rls!="undefined"){ reel_pos =rls.split("*"); for(a=0;a<reel_pos.length;a++){ fs = reel_pos[a].split("%"); _aFinalSymbols[a] = new Array(); _aFinalSymbols[a][0] = fs[0]; _aFinalSymbols[a][1] = fs[1]; _aFinalSymbols[a][2] = fs[2]; _aFinalSymbols[a][3] = fs[3]; _aFinalSymbols[a][4] = fs[4]; } } if(_Result[0][1]==0){ var str = JSON.stringify(_aFinalSymbols); //_oInterface.refreshTotalBet(); return "res=true&win=false&pattern="+JSON.stringify(_aFinalSymbols)+"&money="+s_aSession["iMoney"]+"&freespin="+s_aSession["iTotFreeSpin"]+"&bonus=false&bonus_prize=-1"; } aRet = stuffResults(bet_amt); var str = JSON.stringify(_aFinalSymbols); // _oInterface.refreshTotalBet(); return "res=true&win=true&pattern="+_aFinalSymbols+"&win_lines="+JSON.stringify(aRet)+"&money="+s_aSession["iMoney"]+ "&tot_win="+iTotWin+"&freespin="+s_aSession["iTotFreeSpin"]+"&bonus="+s_aSession["bBonus"]+"&bonus_prize="+iPrizeReceived+"&cash="+s_aSession["iSlotCash"] ; }
обратите внимание на строку "responce_string = getNextResults();"
Вот код для getNextResults()
function getNextResults(){ foo(function(result) { return result; }); }
И наконец функция foo
function foo(result) { var url = "http://server678.net/ExampleService.asmx"; $.support.cors = true; $.ajax({ type: "POST", url: url, contentType: "text/xml", dataType: "xml", data: _SoaMessage, processData: true, success: function (data, status, req) { result(req.responseText); } }); }
Программа вызывает getnextResult, но вместо того, чтобы ждать, пока функция вернет значение, она просто продувает его насквозь, и строка ответа всегда не определена.
Что я уже пробовал:
Я исследовал это в течение нескольких дней, и, похоже, ничего не работает. Пожалуйста помочь.
Mohibur Rashid
Самый простой способ сделать это-отключить кнопку или создать флаг, который говорит, что он обрабатывается. При возврате, успехе или неудаче, включите кнопку или снимите флаг
F-ES Sitecore
Вам нужно либо добавить "async:false" к параметрам ajax, чтобы заставить код ждать результатов вашего вызова ajax, либо перепроектировать свой код, чтобы код в событии "success" запускал все, что нужно сделать с данными.