Глобальная переменная продолжает сбрасываться до нуля после вызова ajax

#javascript #jquery #ajax #iframe

Вопрос:

у меня есть интересный набор кода, что происходит здесь, так это то, что во время этой формы регистрации, как только пользователь дойдет до этого момента, он сериализует данные в массив, а затем использует вызов ajax для отправки информации в базу данных, у меня есть настройка платежного API, которую я должен вызвать через iframe для правильного использования (это второй набор кода ниже первого). эти операторы jQuery определены отдельно друг от друга, но в одном и том же <script> теге внутри кода. Дело в том, что мне нужно uriEncodedLink переменная из этой функции должна быть определена в глобальной области, чтобы ее можно было использовать позже из iframe, который я вызываю для страницы оплаты.

проблема в том, что независимо от того, что я делаю, независимо от того, как я определяю его в глобальной области, он, по-видимому, всегда сбрасывается после того, как вызов ajax отправляет информацию в базу данных. я попытался использовать a var = uriEncodedLink , а затем установить строку для вызова равной той переменной, которая определена в глобальной области, я использовал window.uriEncodedLink = "uri to be called" и попытался вызвать ее из объекта window. однако, безрезультатно, я утешил.зарегистрировал данные вплоть до вызова ajax, и это, по-видимому, работает должным образом, как вы можете видеть из моего размещенного журнала консоли переменной прямо перед вызовом ajax в консоли. переменнаяимеет правильную информацию, которая мне нужна. однако, когда я позже вызову эту переменную (где находится iframe для платежной системы), она становится null такой, как будто вызов ajax стирает все данные, а не только данные формы. а это не то, чего я хочу.

есть ли в любом случае возможность заставить эту переменную работать должным образом?

**Примечание: ** следует отметить, что я не могу переместить iframe в то же место, что и вызов ajax, это приводит к странному поведению с самой формой. И да, я должен использовать iframe, поскольку я должен передать определенное количество данных формы через iframe в платежную систему.

              $(document).bind('next.wizard', function () {
                if (wizard.current == wizard.total) {
                    if ($('form').valid() amp;amp; $('.username-addon').hasClass('available')) {
                        //submit form
                        $(document).trigger('modalloading');
                        var formdata = {};
                        $($('form').serializeArray()).each(function (i, a) {
                            formdata[a.name] = a.value;
                        });
                        let str = formdata.inputAdminContactName;
                        const name = str.split(" ", 2);
                        uriEncodedLink = "Link to be encoded"
                        window.uriEncodedLink = uriEncodedLink
                        console.log(window.uriEncodedLink)          
                        $.ajax('submit.ashx?cp=' wizard.current 'amp;key=<%=xssToken %>', {
                            dataType: 'json', type: 'POST'
                            , data: formdata
                            , success: function(d) {
                                $('form').submit();
                            }
                            , error: function (xhr) {
                                window.location.reload(true);
                            }
                        });
                    
                    } else {
                        $(window).trigger('modal.alert', ['The form has not been filled out correctly, please correct the fields on this page.']);
                    }
                } else {
                    wizard.next(1);
                    var formdata = {};
                    $($('form').serializeArray()).each(function (i, a) {
                        formdata[a.name] = a.value;
                    });
                    $.ajax('submit.ashx?cp=' wizard.current 'amp;key=<%=xssToken %>', {
                        dataType: 'json', type: 'POST'
                        , data: formdata
                        , error: function (xhr) {
                            window.location.reload(true);
                        }
                    });
                }
            }); 
 $(document).bind('finished.wizard', function () {
               
               $('.progress-bar').css({ width: '100%' });
               
                   $('.innerform').html('<div class="finished"><div class="row clearfix">' 
                       '<div class="col-md-12 column"><div class="panel panel-default">' 
                       '<div class="panel-heading"><h2 class="panel-title"><span class="step-title">Almost Finished!</h2></div>' 
                       '<div style="width: 100%; height: 1100px;">' 
                       '<iframe id="cps-embed" src="' window.uriEncodedLink '"'  
                       'style="margin:0; width:100%; border:none;" scrolling="no" width="100%" height="1100px"></iframe>' 
                       '</div></div></div></div></div></div>'
                       ).css({opacity:'0',visibility:'visible'}).animate({opacity:'1'});
                }); 

Комментарии:

1. a $('form').submit() загрузит новую страницу, если вы не обработаете отправку каким-либо другим способом

2. @Bravo можно ли переместить вызов iframe в блок успеха вызова ajax? может быть … таким образом, при успешном выполнении вместо загрузки новой страницы он загрузит блок информации с iframe, который я хочу вызвать, вместо загрузки новой страницы… я должен попробовать это..