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)提示没有权限。
跨域问题网上也看了,搞了下还是没明白。故求教。
...全文
1169 30 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
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 得知
加载更多回复(9)

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧