Javascript 在asp classic中未捕获存储过程的返回值

Javascript 在asp classic中未捕获存储过程的返回值,javascript,sql-server,ajax,sql-server-2008,asp-classic,Javascript,Sql Server,Ajax,Sql Server 2008,Asp Classic,很抱歉发了这么长的帖子,但我想包括所有细节 我有一个使用ajax的JavaScript函数,它调用一些asp代码,然后调用一个存储过程来简单地检查记录是否已经存在。如果确实存在,则会显示一个图像,如果不存在,则会显示另一个图像。由于某些原因,我无法在asp变量中捕获结果,它返回空,这使得调用始终返回false。我已经单独测试了SQL过程,它可以工作,所以数据就在那里。下面的代码将更好地解释 存储过程: 经典ASP代码: 0那么 回答,写真实的 其他的 回答,写错 如果结束 如果结束 %> Jav

很抱歉发了这么长的帖子,但我想包括所有细节

我有一个使用ajax的JavaScript函数,它调用一些asp代码,然后调用一个存储过程来简单地检查记录是否已经存在。如果确实存在,则会显示一个图像,如果不存在,则会显示另一个图像。由于某些原因,我无法在asp变量中捕获结果,它返回空,这使得调用始终返回false。我已经单独测试了SQL过程,它可以工作,所以数据就在那里。下面的代码将更好地解释

存储过程:

经典ASP代码:

0那么 回答,写真实的 其他的 回答,写错 如果结束 如果结束 %> JavaScript Ajax调用

函数CheckUserNameUserName\u元素{ var UserName=UserName\u element.value; var valid_UserName_image=document.getElementById'valid_UserName_image'; var invalid_UserName_image=document.getElementById'invalid_UserName_image'; $j.ajax{ 数据:{action:'CheckUserName',p_UserName:UserName}, 键入:“GET”, url:'page\u logic/\u check\u username\u ajax.asp', 成功:功能结果{ //看看返回值是多少 警报结果 如果结果==真{ 有效的\u用户名\u image.style.display=none; 无效的\u用户名\u image.style.display=inline; } 否则{ 有效的\u用户名\u image.style.display=inline; 无效的\u用户名\u image.style.display=none; } } } ; } 我输入alertresult以查看返回的内容,它总是空的

如果我将存储过程更改为

 SELECT @UserNameExists=0 or SELECT @UserNameExists=1

它将返回一个值,但这当然是对结果进行硬编码,而不是实际从数据库中获取记录。

问题在于SQL Server存储过程中使用输出和返回之间的混淆

为了澄清问题,您的存储过程需要一个输出参数,而不是一个不同的返回值

尝试将输出参数语句更改为

objCmd.Parameters.Append objCmd。CreateParameter@UserNameExists,ADPTEGER,ADPARAME输出
仅供参考adParamReturnValue用于返回返回语句的值(如果使用),并且仅限于INT值。

SqlSanitizeStr此函数来自何处?它是在我加入项目之前编写的函数,基本上去掉了我们的单撇号和SQL不喜欢的其他字符。它不是那么有效,但它被用于整个项目,所以我不得不接受它。我们正在慢慢地将其转换为.Net,但现在我们必须处理经典的asp,因为这是生产中的东西,并且被许多人使用。这也是为什么您看到$j,而不是仅仅$。发起此项目的人实际上开始在经典asp中构建自己的框架。这很难处理。我已将您的查询从存储过程更改为可以在sql 2014 db中运行的查询。它返回1或0。如何提供LOGIN_FACILITY_ID?更改标题的人是对的,但他们无权更改问题的上下文,即使问题是OPs无法理解返回和输出参数。这个答案可能有帮助,但奇怪的是,我的存储过程中永远解决了这个问题。我使用Select@variable设置返回变量,我将其更改为Set@variable,asp页面将其选中。尝试和错误…@Michael记住返回值是不同的,以避免混淆调用它们输出参数。你最终使用了adParamOutput吗?这是关于选择与设置的有趣的一点,我不能说我以前遇到过。是的,我最终使用了adParamOutput。
 SELECT @UserNameExists=0 or SELECT @UserNameExists=1