JQuery跨域调用webservice问题

songjd 2010-07-13 02:17:54

页面JS代码如下:
方法一:
$.getJSON(
"http://ip地址/chatService/chatService.asmx/userLogin?jsoncallback=?",
{userId:"'"+$("#userId").val()+"'", serverId:"'"+$("#serverId").val()+"'", date:"'"+new Date()+"'"},
function(json)
{
if(json.length > 0)
{
alert(json); }
}
);
方法二:
$.ajax({
async: false,
type: "POST",
contentType:"application/json;utf-8",
url: "http://ip地址/chatService/chatService.asmx/userLogin?callback=?",
data: "{userId:'"+$("#userId").val()+"', serverId:'"+$("#serverId").val()+"', date:'"+ new Date() +"'}",
datatype:"json",
success: function(json){
if(json != "")
{
alert(json);
}
}
});



web service方法
已经包含了[System.Web.Script.Services.ScriptService]

[WebMethod]
public void userLogin(string userId, string serverId, string date)
{
DBManager db = new DBManager("COM");
SqlParameter[] p = new SqlParameter[4];
p[0] = new SqlParameter("@userId", SqlDbType.Int, 0);
p[0].Direction = ParameterDirection.Input;
p[0].Value = userId;
p[1] = new SqlParameter("@serverId", SqlDbType.Int, 0);
p[1].Direction = ParameterDirection.Input;
p[1].Value = serverId;
p[2] = new SqlParameter("@date", SqlDbType.DateTime, 0);
p[2].Direction = ParameterDirection.Input;
p[2].Value = date;
p[3] = new SqlParameter("@returns", SqlDbType.Int, 0);
p[3].Direction = ParameterDirection.ReturnValue;

int sysId = db.ExeProc("ap_webUserLog", p);
string callback = HttpContext.Current.Request["jsoncallback"];
string retV = "";
retV += "({state:" + sysId + ", msg:'成功建立连接'})";
HttpResponse response = HttpContext.Current.Response;
response.Write(callback + retV);
response.End();
}


现在的问题是:
用方法一,则整个getJSON执行不到内部
用方法二,jquery库文件中j.open(G,M.URL, async)提示没有权限。
跨域问题网上也看了,搞了下还是没明白。故求教。
...全文
1105 点赞 收藏 30
写回复
30 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
qq623932737 2011-05-24
跨域是可以的 打开ie 工具-选项-安全-自定义级别-找到通过与访问资源-启用 这样就可以了,
你为啥非要jquen写呢 ,直接用js写不是行啊
回复
阿非 2010-07-13
你先把webservice 改为一个参数 userId

然后测试一下吧
回复
songjd 2010-07-13

{userId:"1", serverId:"10", date:"2010-07-13 17:55:55"},

我将参数都直接赋固定的值也执行不到。莫非是我webservice里有问题?
回复
阿非 2010-07-13
看看是不是你的参数内容有问题,逐个测试,确认是哪个参数有问题
回复
lchy110 2010-07-13
围观。。。期待下一个大虾解答
回复
songjd 2010-07-13
将传递的参数去掉,就可以执行,应该是传递参数的问题了。
回复
happy664618843 2010-07-13
获取返回的 json数据
$(jsondta).each(funtcion(i){
var name=jsondata[i].name;
})
回复
songjd 2010-07-13
调试到jquery包里面的时候每次都是 if(o.isready){return;}这里o.isready=true就直接返回了。
回复
songjd 2010-07-13
[Quote=引用 18 楼 ganlianter 的回复:]
改成这个json看看{userId:$("#userId").val(), serverId:$("#serverId").val(), date:new Date()}
[/Quote]

这个我开始的参数传递是这样的,还是不行的。
回复
阿非 2010-07-13
{userId:"'"+$("#userId").val()+"'", serverId:"'"+$("#serverId").val()+"'", date:"'"+new Date()+"'"},

=》

{userId:$("#userId").val(), serverId:$("#serverId").val(), date:new Date()},

将引号去掉试下
回复
songjd 2010-07-13
[Quote=引用 14 楼 keyouea 的回复:]
1)webservice 是不存在跨域问题的,相反,webservice 就是为了这个而存在的.
2)web跨域 含义指:存在两个不同域下的js对象不能相互访问.从安全性考虑.
3) 打开ie,在地址栏输入你要访问的地址,如果能访问,而且返回正确数据,说明webservice 是好的?
[/Quote]

执行webservice是可以的,现在的问题是js里面连接不到webservice里的方法,从而无法获取数据
回复
ganlianter 2010-07-13
改成这个json看看{userId:$("#userId").val(), serverId:$("#serverId").val(), date:new Date()}
回复
songjd 2010-07-13

<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
回复
咖啡2003 2010-07-13
要返回jsonp,返回内容以函数参数形势呈现
回复
阿非 2010-07-13
你现在的配置文件

贴webservice 相关的即可
回复
keyouea 2010-07-13
1)webservice 是不存在跨域问题的,相反,webservice 就是为了这个而存在的.
2)web跨域 含义指:存在两个不同域下的js对象不能相互访问.从安全性考虑.
3) 打开ie,在地址栏输入你要访问的地址,如果能访问,而且返回正确数据,说明webservice 是好的?
回复
songjd 2010-07-13
[Quote=引用 12 楼 sandy945 的回复:]
那就是webservice 不支持 get 访问

你可以在配置文件中加上
[/Quote]

那个我已经加上去了。可还是不行。
回复
阿非 2010-07-13
那就是webservice 不支持 get 访问

你可以在配置文件中加上
回复
songjd 2010-07-13
[Quote=引用 10 楼 sandy945 的回复:]
看webservie所在项目的配置文件中 是否有
<add name="HttpGet"/>

也可通过浏览器访问webservice 得知
[/Quote]

找了一下,没有
回复
阿非 2010-07-13
看webservie所在项目的配置文件中 是否有
<add name="HttpGet"/>

也可通过浏览器访问webservice 得知
回复
加载更多回复
相关推荐
发帖
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
帖子事件
创建了帖子
2010-07-13 02:17
社区公告
暂无公告