我尝试通过AJAX将JSON发布到一个经典ASP页面,该页面检索值,检查数据库并将JSON返回到原始页面。
我可以通过AJAX发布JSON。我可以从ASP返回JSON。我无法将发布的JSON检索到ASP变量中。
POST使用Request.Form,GET使用Request.QueryString。JSON用什么做?
我有JSON库,但它们只显示在ASP脚本中创建一个字符串,然后解析它。我需要解析JSON从当被传递一个外部变量。
JavaScript
var thing = $(this).val();
$.ajax({
type: "POST",
url: '/ajax/check_username.asp',
data: "{'userName':'" + thing + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
cache: false,
async: false,
success: function() {
alert('success');
}
});
ASP文件(check_username.asp)
Response.ContentType = "application/json"
sEmail = request.form() -- THE PROBLEM
Set oRS = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT SYSUserID FROM dbo.t_SYS_User WHERE Username='"&sEmail&"'"
oRS.Open SQL, oConn
if not oRS.EOF then
sStatus = (new JSON).toJSON("username", true, false)
else
sStatus = (new JSON).toJSON("username", false, false)
end if
response.write sStatus
8条答案
按热度按时间6tdlim6h1#
我的解决方案对我不起作用,我得到了
bStream.Write requestBody
行的错误(说“在此上下文中不允许操作”)。这似乎对我有效,并返回整个请求字符串。然而,它只对<= 100 KB的请求数据起作用,否则你必须弄清楚如何让BinaryRead方法起作用。(来源:http://msdn.microsoft.com/en-us/library/ms525985%28v=VS.90%29.aspx)
kgsdhlau2#
我使用了Adhadogg的代码,但只有在我指定了更多的信息之后:
在此之前,我会得到“在此上下文中不允许操作。”正如jjokin报告的那样。
dwthyt8l3#
以下是我在ASP Vbscript中使用的解决方案,其中包含Radium的代码和一些更正:
shyt4zoc4#
您可以考虑从VBScript切换到JScript(JScript是微软称之为JavaScript的东西)。
为什么呢?因为在经典ASP中,你可以执行浏览器可以执行的JSON调用,并使用eval()语句将结果读入JavaScript对象。
帕迪说:我没有答案,但我对你深表同情。经典的asp和JSON处理-听起来很有趣。
@Paddy:经典的ASP和JSON很有趣,事实上它很棒!(如果从VBScript切换到使用JScript。)
请注意,您不必退出VBScript冷火鸡,您仍然可以在同一个ASP文件中在两者之间进行互操作,但如果您首先声明JScript,则需要将VBScript限制为JavaScript或函数,反之亦然,否则可能会发生不可预知的事情。
这里有一个我正在谈论的快速例子:
ao218c7q5#
我也有同样的问题,但很快我就弄清楚了如何发布一个JSON对象到ASP服务器。
这是一个想法:未测试。努力工作吧><。
将json对象解析为字符串,然后发布回服务器。(这是一个典型的字符串发布)
在ASP端,使用JSON库将字符串解析回对象。
JSON库http://code.google.com/p/aspjson/的链接
我认为尝试将JSON发布回asp的人应该有基本的发布知识。任何进一步的帮助,请让我知道
pcww981p6#
不知道你是否还在寻找,但这个答案可能会帮助你。但是,这些代码是用于ASP.NET页的。经典的ASP模拟是:
然后,你可能想把它转换成一个字符串来解析/使用。可以使用ADODB.Stream进行转换。
bf1o4zei7#
一般来说,(new VBArray(NULL).toArray())应该在SafeArray上工作,这是Request.BinaryRead返回的。但事实并非如此我发现了这个解决方案,我修改:
感谢Rasberry的评论@Link
请注意,它可能无法正确处理编码。我没有深入研究ADO数据类型的201意味着什么,但它确实有效。
syqv5f0l8#
您可以通过此代码找到所有发布的参数。