$.getJSON在函数内部时没有响应
$.getJSON not responding when inside function
validateMdn()函数中的$.getJSON jquery函数在上面的te函数中不起作用。但当我在函数外使用它时效果很好。我需要它在函数内的$.getJSON中,因为我只希望在表单提交时触发请求。
函数中的警报工作正常,但在$.getJSON(url,function(returnData){alert("Hello");
谢谢!
<script>
function validateMdn(){
var url ="http://www.example.com/Validate.do?mdn=123456789&type=postpaid";
alert('validate function');
$.getJSON(url, function(returnData) {
alert("Validity is : "+returnData.isValid+" Balance is: "+returnData.balance);
});
}
function checkNumber() {
var numb1 = $('[name=ordPhoneNumber]');
var numb2 = $('[name=ordPhoneNumberConfirm]');
isvalid = numb1.val()=== numb2.val();
if(!isvalid){
alert('Number does not match')
}
numb2.closest('.input-wrapper').toggleClass('error',!isvalid);
return isvalid;
}
$(function() {
$('#topup_form').submit( function() {
return (checkNumber()&&validateMdn());
});
});
</script>
<form method="post" name="topup" id="topup" action="https://www.example.com/topup.html">
<input type="text" name="ordPhoneNumber" id="ordPhoneNumber" maxlength="12" pattern="phone" required>
<small class="error invalid"> Error messgae. </small>
<input type="text" name="ordPhoneNumberConfirm" id="ordPhoneNumberConfirm" maxlength="12" pattern="phone" required>
<small class="error invalid"> Error message. </small>
<button type="submit" name="submitbutton" class="button blue right">Continue</button>
<button type="reset" class="button right">Clear</button>
</form>
$.getJSON()
是异步的。为了利用onsubmit处理程序中的响应,validateMdn()
应该返回一个promise。然后,处理程序可以使用promise方法(.then()
或.done()
)来访问数据。
$(function() {
function validateMdn() {
var url ="http://www.example.com/Validate.do?mdn=123456789&type=postpaid";
alert('validate function');
//return the promise returned by $.getJSON().then().
return $.getJSON(url).then(function(returnData) {
alert("Validity is : " + returnData.isValid + "'nBalance is: " + returnData.balance);
return returnData;
});
}
function checkNumber() {
var numb1 = $('[name=ordPhoneNumber]'),
numb2 = $('[name=ordPhoneNumberConfirm]'),
isvalid = numb1.val()=== numb2.val();//var
if(isvalid) {
numb2.closest('.input-wrapper').removeClass('error');
} else {
alert('Number does not match')
numb2.closest('.input-wrapper').addClass('error');
}
return isvalid;
}
$('#topup_form').on('submit', function(e) {
e.preventDefault();//inhibit form submission
var form = this;
validateMdn().then(function(returnData) {
if(checkNumber() && returnData.isValid) {
form.submit();//submit form only if both validations are successful
}
});
});
});
编辑
可以在呼叫validateMdn()
之前呼叫checkNumber()
,因此只有当号码有效时才允许呼叫validateMdn()
。
首先,修改checkNumber()
以返回有效数字或false:
function checkNumber() {
var numb1 = $('[name=ordPhoneNumber]'),
numb2 = $('[name=ordPhoneNumberConfirm]'),
isvalid = numb1.val()=== numb2.val();//var
if(isvalid) {
numb2.closest('.input-wrapper').removeClass('error');
} else {
alert('Number does not match')
numb2.closest('.input-wrapper').addClass('error');
}
return isvalid ? numb1 : false;
}
checkNumber()
返回的值可以进行测试并传递给validateDn():
$('#topup_form').on('submit', function(e) {
e.preventDefault();//inhibit form submission
var form = this,
number = checkNumber();
if(number) {//number is either a valid number or `false`
validateMdn(number).then(function(returnData) {
if(numberValid && returnData.isValid) {
form.submit();//submit form only if both validations are successful
}
});
}
});
现在,您所需要做的就是修改validateMdn()
以接受number
作为参数,并对其进行处理
相关文章:
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 如何将getJson的响应保存在全局变量中
- 调用函数内部的函数
- 使用javascript API响应内部服务器错误将曲目上传到SoundCloud
- 如果从onclick()内部调用app.open,则它没有响应
- 可以't从回调函数内部访问响应
- AngularJS如何解码带有令牌和内部用户信息的jsonp响应
- for 循环元素的执行时间比内部 AJAX 调用可以响应的要快
- 无法加载资源:服务器在绑定功能中以状态 500(内部服务器错误)进行响应
- 使用jqueryload方法将ajax响应数据作为内部html加载到页面元素中
- 如何在angularjs中使用factory在GPS检测器函数内部使用$http.post方法时获得回调响应
- Getting 500:从javascript发送http请求时,来自Web服务器的响应出现内部服务器错误
- $.getJSON在函数内部时没有响应
- 响应行不尊重其内部DIV的高度
- 使用正确的数组响应HTTP请求时出现问题.使用expressjs从函数内部发送结果的可能方法
- Ajax错误:加载资源失败:服务器响应状态为500(内部服务器错误)
- AngularJS:在指令内部的链接函数中访问json响应
- 加载资源失败:服务器响应状态为500(内部服务器错误)MVC JAVASCRIPT
- 如何防止按钮内部span标签在按钮点击时不可点击或无响应
- 函数内部的AJAX响应缓存/ onclick事件