Ajax variable value to javascript
我已经问了几个小时而没有发现任何问题......
我有一个注册表单供用户创建帐户。 按下提交按钮时,将调用validateForm函数。
在这个函数中,我做了一些有效的javascript测试,但后来我需要验证用户名是否可用。 为此,我创建了一个外部PHP文件,并使用$ .ajax调用它。
以下是代码的一部分:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | function validateRegistration(){ // Some tests.... // Check if username is already used // Call external php file to get information about the username $.ajax({ url: 'AjaxFunctions/getUsernameAjax.php', data:"username=" + $("#username").val(), success: function(data){ // Username already in use if(data =="ko"){ // Stop validateForm() } // Username not used yet else{ // Continue tests } } }); // Other tests } |
我的问题是如何让validateForm()从$ .ajax中返回false?
我可以在Ajax部分之前声明一个js变量并使用Ajax设置它吗?
我想答案是显而易见的,但我是Ajax的新手,我无法得到它......
非常感谢你的帮助!
要实现这一点,您可以执行此答案中描述的同步ajax调用,但这对于您的网站性能来说是非常危险的。
或者 - 这是正确的方法 - 您应该有一个外部变量,无论用户名是否可用,只要用户输入您执行请求的内容,如果有效则更改变量,否则您会显示警告消息。接下来在validateRegistration()函数中,您只检查外部变量(+可能是某种形式的回调,具体取决于您从哪里调用它)。优点是用户仍然可以在请求待决时继续执行操作(例如填写表单的其余部分)。
这里的传统解决方案是将回调函数传递给
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | // global variable indicating that all is clear for submission shouldSubmit = false; // run this when the user enters an name, e.g. onkeyup or onchange on the username field function validateRegistration(callback) { shouldSubmit = false; // number of ajax calls should be minimized // so do all other checks first if(username.length < 3) { callback(false); } else if(username.indexOf("spam") != -1) { callback(false) } else { $.ajax({ .... success: function() { if(data =="ko") { callback(false); } else { callback(true); } } }); } } |
现在使用函数参数调用
1 2 3 4 5 6 7 8 9 | validateRegistration(function(result) { alert("username valid?" + result); if(result) { $("#username").addClass("valid-checkmark"); } else { $("#username").addClass("invalid-xmark"); } shouldSubmit = result; }); |
现在使用表单的
如果目标是检查用户名可用性,那么在输入用户名之后如何检查它。例如,您可以将其绑定到keyUp事件以进行击键,或者将其绑定到离开文本框时的模糊事件。
这意味着当用户到达提交按钮时,表单的该部分已经被验证。
在php中,如果你打印出JSON,如:
1 |
显示为:
1 2 3 | { "ko":"good" } |
然后在功能中
1 2 3 | if(data.ko =="good"){ //do stuff } |
这就是我通常这样做的方式。您可以使用您在JSON中使用的名称来获取变量,以便在需要时可以使用其他内容。
您可以像现在一样进行同步ajax调用,而不是异步调用。这意味着Ajax调用将在下一行代码执行之前完成。
要在jQuery中执行此操作,只需将
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | var someVariable; $.ajax({ url: 'AjaxFunctions/getUsernameAjax.php', data:"username=" + $("#username").val(), success: function(data){ // Username already in use someVariable ="something"; if(data =="ko"){ // Stop validateForm() } // Username not used yet else{ // Continue tests } }, async: false }); alert(someVariable); // should alert 'something', as long as the ajax request was successful |