我正在使用JSONP检索登录表单的值,然后让表单自我提交。但是,表单在填充字段之前提交,从而生成验证标记。
该函数确实返回正确的值,但全局范围的变量unscrambleText返回undefined。我知道async:false是返回同步calss所必需的,但在这种情况下似乎忽略了。我让这个在另一个页面上使用基本的AJAX调用。这个具体的例子我错过了什么?
$(document).ready(function () {
if ((getQueryVariable("a") != 0) && (getQueryVariable("b") != 0)) {
$("#UsernameTextBox").val(decryptEm(getQueryVariable("a")));
$("#PasswordTextBox").val(decryptEm(getQueryVariable("b"));
//This action is being triggered before the above two fields are populated
$("#ctl00_ContentPlaceHolder1_SubmitButton").trigger("click");
}
function getQueryVariable(variable) {
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split("=");
if (pair[0] == variable) {
return unescape(pair[1]);
}
}
return 0;
}
function decryptEm(thevar) {
var unscrambleText;
$.ajax({
url: 'http://foo.bar/decrypt.php',
async: false,
dataType: 'jsonp',
data: 'text=' + thevar,
success: function (data) {
unscrambleText = data["theval"].replace(/^\s+|\s+$/g, "");
}
});
return unscrambleText;
}
});
答案 0 :(得分:0)
你可以在触发点击之前尝试使用setInterval,也许2秒的延迟就足够了。
交替更改您的代码以执行decryptEms
,这将执行所有字段并返回两者,然后才执行触发表单提交
答案 1 :(得分:0)
它返回undefined
,因为它在函数返回时没有值。 decryptEm
与服务器响应您的请求之间存在延迟。这种延迟可能是任何因素,因为它取决于服务器的响应时间。
答案 2 :(得分:0)
将它放在一个函数中,如下所示:
function loadValues(){
$("#UsernameTextBox").val(decryptEm(getQueryVariable("a")));
$("#PasswordTextBox").val(decryptEm(getQueryVariable("b"));
return true;
}
if(loadValues==true){
$("#ctl00_ContentPlaceHolder1_SubmitButton").trigger("click");
}
通过这种方式,您可以确保在提交被触发之前其他内容已经完成。