已解决问题
收藏
关于jquery ajax中返回值的问题
80
[ 标签:jquery, ajax ]
conn.open();
我的星星页面
2009-10-25 11:52
JQuery Code:
$.ajax({
type: "POST",
url: "SourceCode/checkLoginInfo.aspx/checkGeneralUser",
data: "{userName:'" + $("#userName").val() + "',userPassword:'" + $("#userPassword").val() + "'}",
contentType: "application/JSON; charset=utf-8",
timeout: 1000,
dataType: "JSON",
error: function() { $("#message").html("错误") },
success: function(msg) { $("#message").html(msg);}
});C# Code:
public static string checkGeneralUser(string userName, string userPassword)
{
string msg;
string connStr = ConfigurationManager.ConnectionStrings["connStr"].ToString();
string commStr = "select * from userInfo where userName = '" + userName + "'";
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
SqlCommand comm = new SqlCommand(commStr, conn);
SqlDataReader dr = comm.ExecuteReader();
if (dr.Read())
{
if (dr["userPassword"].ToString().Trim() != userPassword)
{
msg = "密码错误!";
}
else
{
msg = "OK";
}
}
else
{
msg = "用户名错误!";
}
dr.Close();
conn.Close();
return msg;
}返回结果:{"d":"用户名错误!"},怎么不单单是我后台代码中返回的字符,为什么还有{}""..这些特殊符号!!
满意答案
好评率:100%
可以作为字符返回的。
你可以将提交的页面的所有网页代码删除。然后用 Response.Write("你想返回的字符");
这样客户端的ajax就只是收到你想返回的字符串了。
继续追问:
但是我是调用后台代码中的方法啊!怎么能将结果输出到页面上呢!还有,我不可能在一个页面中只写一个方法啊!
补充回答:
该答案是回答你对conn.open()的追问。
思路就是 让整个网页 = 你想返回的信息
呵呵
继续追问:
不是,我不想返回整个页面,我只想让她返回C#代码中的方法return出来的值!我现在是这个值我能接收到,但是他多出那些{}""这些特殊符号出来了!我C#代码中返回的是:用户名错误!,但是当succcess中的回调函数接收到的确是:{"d":"用户名错误!"}
补充回答:
1. Respone.Write就是将结果输出成页面内容,C#后台和前台是联系的。
2.如果不想一个页面只能写一个方法的话,那么就在这个方法里面,把return msg改为
Response.Write(msg);
Response.Flush();
Response.End();
继续追问:
无法在方法中调用Response对象
补充回答:
另一种方法就是在客户端解析json对象:
var obj = eval(msg);
var message = obj.d;
或者直接就msg.d也可以?
继续追问:
我也试了!!加了.d之后毛后不回来了!!
补充回答:
我的意思是,保持contentType: "application/JSON; charset=utf-8",和dataType: "JSON", 不变,按你原先的描述,返回的结果是{"d":"用户名错误!"}。
那么对于这个结果,你把它当作一个对象,然后取这个对象的属性d的值就行了。
就是我上面写的
var obj = eval(msg);
var message = obj.d;
只要你保证msg = {"d":"用户名错误!"} ; 那么message肯定是"用户名错误!"。 这个不应该有什么问题啊。
继续追问:
这是msg得结果
这是msg.d得结果返回是undefined
补充回答:
先使用
var obj = eval(msg);
alert(obj);
看看?
继续追问:
eval()不是将参数作为javascript代码来执行么?{"d":"用户名错误!"}这样一段代码,在javascript里面是执行不出效果来吧?
补充回答:
{"d":"用户名错误!"} 可能仅仅是一个字符串,因此,你对一个字符串使用msg.d当然是undefined。
但是你把这个字符串转为javascript对象的话,就可以使用.d属性了。
而将字符串转为javascript对象的方法就是使用eval。
继续追问:
我晕,我直接
var obj = eval({"d":"用户名错误!"});
alert(obj.d);能正确的返回了!
但是
var obj = eval(msg);
alert(obj.d);又没结果了!
我有测试了msg的值,直接alert(msg);返回的值也是{"d":"用户名错误!"},真是郁闷!
补充回答:
你的写法错误。({"d":"用户名错误!"} 本身就是一个对象了,不需要加上eval来处理。应该在它外面加上' '才是字符串。我刚才试验了一下,变成字符串后不知道为什么eval失败了。不过我们可以用另一个函数JSON.parse来完成同样的工作。
var msg = '{"d":"用户名错误!"}';
var obj = JSON.parse(msg);
alert(obj.d);
该代码在我本机已测试通过。
继续追问:
哈哈!哥们!行了!!非常感谢!
补充回答:
eval失败的问题我弄明白了。正确的写法应该是:
var obj = eval( "(" + msg + ")" );
必须把字符串整个用()括起来,这样才保证不会因为字符串里带了"",{ } , []这些符号而失败。
您已经评价过!
您已经评价过!
您已经评价过!
您已经评价过!
conn.open();的感言:
哈哈!非常感谢
收藏
分享到:
更好的回答
其他答案(2)
因为你设置了contentType: "application/JSON; charset=utf-8",和dataType: "JSON",
所以它会把返回的对象做json对象处理
你去掉这两行,就是字符串了
就不会有json对象中的{}等符号了
继续追问:
作为字符返回的话,整个网页都返回来了!- -!
补充回答:
嗯,这个有两种解决方案
第一:就是删除页面中html标签,只留头信息
第二:就是在response.write();后面加上response.end();代码
您已经评价过!
您已经评价过!
把dataType: "JSON", 改成 dataType: "html", 试试~
继续追问:
没用!!上面说的我都试过了!
您已经评价过!
您已经评价过!