Javascript 使用jquery调用webservice时出错
我读过很多关于jquery的书,我有一个Web服务,在那里我把一个companyID转换成真正的companyName。现在我想用jquery或javascript调用该Web服务。Web服务在我正在处理的主机上。我不工作,总是出错 这是我的密码:Javascript 使用jquery调用webservice时出错,javascript,jquery,web-services,Javascript,Jquery,Web Services,我读过很多关于jquery的书,我有一个Web服务,在那里我把一个companyID转换成真正的companyName。现在我想用jquery或javascript调用该Web服务。Web服务在我正在处理的主机上。我不工作,总是出错 这是我的密码: <script type="text/javascript" src="http://kmosvi24/_layouts/jquery-1.3.2.min.js"></script> <script type="tex
<script type="text/javascript" src="http://kmosvi24/_layouts/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
var test = "KBEACDNV";
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "http://webservice/service.asmx/getCompanyByCompanyID",
data: "{'sCompanyID:' + 'test'}",
dataType: "json",
succes:function(response){ alert("good"); },
error: function(response) { alert("Uh oh"); },
complete: function(response) { alert("" + response); }
});
</script>
有人能帮我吗
谢谢。。你在第11行把success拼错了 。。您可能希望将数据格式化为
data: "sCompanyID=test"
快速浏览以验证您正在传递服务期望的参数。看起来您期望的是一个带有ASMX服务的SOAP数据包,而jQuery更适合于访问由ASHX文件或WCF服务生成的restful服务。嗯。。你在第11行把success拼错了 。。您可能希望将数据格式化为
data: "sCompanyID=test"
快速浏览以验证您正在传递服务期望的参数。看起来您期望的是一个带有ASMX服务的SOAP数据包,而jQuery更适合于访问由ASHX文件或WCF服务生成的restful服务。为了从jQuery运行web服务,您应该使用WCF或普通web服务,但您应该将[ScriptMethod]添加到服务的方法中并[ScriptService]添加到您的Web服务描述 哇哇 刚刚注意到您正试图从一台主机向另一台主机调用该服务…该主机无法工作。该服务应与调用它的页面位于同一域中
作为对Jeff回答的回答,格式化数据的正确方法是数据:{key:value}为了从Jquery运行web服务,您应该使用WCF或普通web服务,但您应该将[ScriptMethod]添加到服务的方法中,并将[ScriptService]添加到web服务描述中 哇哇 刚刚注意到您正试图从一台主机向另一台主机调用该服务…该主机无法工作。该服务应与调用它的页面位于同一域中
作为对Jeff回答的回答,格式化数据的正确方法是数据:{key:value}我认为您没有正确使用数据参数,通常它是一个键值对,如:
data: {sCompanyID: 'test'}
我相信,您使用它的方式会导致jQuery试图发布到
NET web服务不是SOAP吗?我不认为jQuery可以解析它
edit:Nevermind,没有意识到您正在将这些作为json数据传递。谢谢评论!我认为您没有正确使用数据参数,通常它是一个键值对,如:
data: {sCompanyID: 'test'}
我相信,您使用它的方式会导致jQuery试图发布到
NET web服务不是SOAP吗?我不认为jQuery可以解析它
edit:Nevermind,没有意识到您正在将这些作为json数据传递。感谢评论员!您不能对您自己的主机以外的主机进行AJAX调用。如果确实需要这样做,请调用您自己的服务器,并使用简单的代理重定向到您需要的域 例如,您可以在Web服务器中使用ProxyPass指令:
ProxyPass /service/ http://webservice/service.asmx
ProxyPassReverse /service/ http://webservice/service.asmx
然后,您可以向/service/getCompanyByCompanyID发出AJAX请求,该请求将被代理到正确的URL。您不能对自己以外的主机进行AJAX调用。如果确实必须这样做,请调用您自己的服务器,并使用简单的代理重定向到您需要的域 例如,您可以在Web服务器中使用ProxyPass指令:
ProxyPass /service/ http://webservice/service.asmx
ProxyPassReverse /service/ http://webservice/service.asmx
然后,您可以向/service/getCompanyByCompanyID发出AJAX请求,它将被代理到正确的URL。正如其他一些人指出的那样,您不能在另一个域上调用Web服务,但是当您使用ASP.NET时,您可以编写一个原始HTTP处理程序,通常带有.ashx扩展名,以代理您从客户端到服务器的请求.将其放置在timos服务器上 所以在你的ashx文件中,你可以写一些关于
public void ProcessRequest (HttpContext context)
{
XmlDocument wsResponse = new XmlDocument();
string url = "http://webservice/service.asmx/getCompanyByCompanyID?CompanyID="
context.Request.Form["CompanyID"].ToString()
wsResponse.Load(url);
string XMLDocument = wsResponse.InnerXml;
context.Response.ContentType = "text/xml";
context.Response.Write(XMLDocument);
}
希望这能有所帮助。正如其他一些人指出的那样,您不能在另一个域上调用Web服务,但是,当您使用ASP.NET时,您可以编写一个原始HTTP处理程序,通常带有.ashx扩展名,以代理您从客户端到服务器的请求。您可以将其放在timos服务器上 所以在你的ashx文件中,你可以写一些关于
public void ProcessRequest (HttpContext context)
{
XmlDocument wsResponse = new XmlDocument();
string url = "http://webservice/service.asmx/getCompanyByCompanyID?CompanyID="
context.Request.Form["CompanyID"].ToString()
wsResponse.Load(url);
string XMLDocument = wsResponse.InnerXml;
context.Response.ContentType = "text/xml";
context.Response.Write(XMLDocument);
}
希望这会有所帮助。您可以向其他服务器发出请求,但只有在调用使用GET时才可以。因为您所做的一切都是查找,所以GET请求应该可以。您可以向其他服务器发出请求,但只有在调用使用GET时才可以。因为您所做的一切都是查找,所以GET请求应该可以。使用jQuery Ajax请求时定义要在请求中发送的变量时,您需要使用以下格式:
data: "variableName=variableContent",
你写道:
data: "{'sCompanyID:' + 'test'}"
这将不起作用,原因有二:
-你已经包括了不需要的花括号。
-您使用了分号:,而不是等号=
只要你改变这些,它就会工作
我才意识到杰夫·弗里茨已经给了你正确的答案。他的回答恰到好处 对于jQuery Ajax请求,在定义请求中要发送的变量时,需要使用以下格式:
data: "variableName=variableContent",
你写道:
data: "{'sCompanyID:' + 'test'}"
这将不起作用,原因有二:
-你已经包括了不需要的花括号。
-您使用了分号:,而不是等号=
只要你改变这些,它就会工作
我才意识到杰夫·弗里茨已经给了你正确的答案。他的回答恰到好处 我应该在哪里将其添加到脚本中?这是一个Apache配置选项。仅仅改变客户端是无法实现这一点的。您自己的域中的服务器上需要一个代理。我在哪里将其添加到脚本中?这是一个Apache配置选项。仅仅改变客户端是无法实现这一点的。您自己的域中的服务器上需要一个代理。数据传递正确,它需要的是json字符串,而不是javascript变量。jquery将自动将其编码为查询字符串。您可以将JSON字符串发送到具有[ScriptService]和[ScriptMethod]的asmx方法,但[ScriptMethod]啊没有意识到它可以做到这一点!已更新答案。数据传递正确,它需要的是json字符串,而不是javascript变量。jquery将自动将其编码为查询字符串。您可以将JSON字符串发送到具有[ScriptService]和[ScriptMethod]的asmx方法,但[ScriptMethod]啊没有意识到它可以做到这一点!更新答案。同意格式化数据,我没有注意到数据类型是JSON。同意格式化数据,我没有注意到数据类型是JSON。我要注意的是,如果结果是JS函数,您只能处理结果。我要注意,如果结果是JS函数,您只能处理结果。