2012-07-19 63 views
1

我有一个这样的javascript调用:的Javascript错误警报为了

usernameTest('queijo'); 
alert('a'); 

功能usernameTest()工作,并进行调试,它会提醒字符串“T”或“F”。

为什么当我加载这个页面时,显示的第一个警告是“a”,只有在“t”或“f”之后? (顺便说一句,jQuery是加载到页面了。)

[编辑]

源代码:

function usernameTest(username) { 
    var unReg = /^[0-9a-zA-Z_]{1,20}$/; 
    if(!unReg.test(username)) 
     return false; 
    $.ajax({ 
     type : 'POST', 
     url : 'checkuser.php', 
     data : 'username=' + username, 
     cache : false, 
     success : function(response) { 
      if(response == 1) { 
       alert('f'); 
       return false; 
      } else { 
       alert('t'); 
       return true; 
      } 
     } 
    }); 
} 

[EDIT2]

我已经知道的问题是,是叫AJAX 。新的主要问题现在是另一个。 我这样称呼它(在适当的地方,而不是用于调试的代码);

if(!usernameTest(argument)) 
    //do something 

我该怎么做这样的事情?

回答

1

如果要使用的代码可能会根据系统状态而更改,则可以将该函数作为参数传递给usernameTest以执行您所期望的操作。否则,您可以直接在if语句中编写代码。

function usernameTest(username, onFailure) { 
    // code here... 

    $.ajax({ 
     // ajax setup here... 
     success : function(response) { 
      if(response == 1) { 
       //... 
      } else if (typeof(onFailure) === 'function') { 
       onFailure(); 
      } 
     } 
    }); 
} 

var name = 'Bob'; 
var onFailure = function() { 
    // do something 
}; 

usernameTest(name, onFailure); 

另外,请尝试当你问你的问题,除非是不清楚或需要作详细说明不改的问题要具体。如果有人回答了原始问题,他/她应该得到信用,并且应该分别询问其他问题。

+0

谢谢!并且感谢您的建议,我在这里是新的,当我第一次发布这个问题时,我几乎陷入恐慌。 – 2012-07-19 01:45:34

0

您的usernameTest功能确实不是提醒任何事情,否则会在提醒“a”之前发出警报。

我确定它安装了一个事件监听器(可能是文档准备好了吗? - 如果你给我的代码,我可以告诉你更多),其中“用户”提醒。事件监听器函数不是立即执行,而是在将来执行。

2

@Bergi说的或usernameTest()是一个AJAX函数 - 这意味着它是异步的。考虑在问题中包含usernameTest()函数的来源 - 这样就会更容易回答。

更新:我看到它是一个AJAX函数。你需要把你的代码在回调中:

success : function(response) { 
      if(response == 1) { 
       //do stuff here - you can't return from here as this is asynchronous - i.e. happening independently (not at the same time) of the rest of the code 
      } else { 
       //do stuff here - you can't return from here as this is asynchronous - i.e. happening independently (not at the same time) of the rest of the code 
      } 
     } 
+0

已添加源代码。是的,这是AJAX ...有什么办法解决这个问题? – 2012-07-19 01:06:33

+0

谢谢你的回答! – 2012-07-19 01:46:35

1

usernameTest发出ajax请求。 ajax中的第一个A代表异步:请求发出,代码立即执行,包括alert('a')调用。只有当响应从服务器返回时才执行成功回调,包括alert('t')

这种异步执行方式是Javascript开发的核心。你必须拥抱它并用它来解决你的问题。战斗只会导致悲伤。

请注意您的返回语句不会从usernameTest返回值。他们从成功回调中返回。您的usernameTest函数不会返回任何内容。没有办法像这样将异步请求转换为同步函数返回。

您需要找到一种方法异步使用来自服务器的答案。例如,无论你打算放入调用的if子句,而是将该代码放入成功回调本身。然后它将获得真实或错误的价值。

+0

我这样调用它:if(usernameTest(argument))等等等等等等。我应该怎么做? – 2012-07-19 01:18:32

+0

@JoãoLuís:我已经添加到我的答案。 – 2012-07-19 01:30:37

+0

谢谢你的回答! – 2012-07-19 01:47:30

0

永远不会使用警报。使用(){console.log()}或(){console & & console.log()}。

通过使用警报,您只能看到一条消息。你从来不想拥有的味精。

使用的console.log你看到实例的功能的消息, 没有违反网站:

什么? [确定]

+0

谢谢你的提示!虽然在PHP,HTML和CSS方面经验丰富,但我几乎是一个使用JavaScript的新手... – 2012-07-19 01:48:26

+1

@JoãoLuís尝试调试器并设置断点;)我隐藏的最爱是js的IE9.10 [F12],但也使用Firebug for HTML,用于javaScript和* kit的V8窗口! – metadings 2012-07-19 02:04:35