#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, который я хочу вызвать, вместо загрузки новой страницы… я должен попробовать это..