使用jquery调用Web服务时出错

时间:2009-04-24 13:29:55

标签: javascript jquery web-services

我已经阅读了很多关于jquery的内容,并且我有一个web服务,我将companyID转换为真正的companyName。现在我想用jquery或javascript调用该webservice。网络服务在主机http://webservice/service.asmx上,我正在http://tlmos上工作。我不工作,我总是收到错误

这是我的代码:

<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>  

有人可以帮助我吗?

THX

7 个答案:

答案 0 :(得分:6)

嗯......你在第11行拼写成功错误

..您可能希望将数据格式化为

data: "sCompanyID=test"

快速浏览jQuery API page on this one以验证您是否传递了服务所需的参数。看起来您期望使用ASMX服务的SOAP数据包,并且jQuery更适合于访问从ASHX文件或WCF服务生成的restful服务。

答案 1 :(得分:2)

正如其他人指出你不能在另一个域上调用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);

}

希望这有帮助。

答案 2 :(得分:2)

您可以向其他服务器发出请求,但前提是该呼叫使用GET。因为你所做的一切都是查找,所以GET请求应该没问题。

答案 3 :(得分:1)

我认为你没有正确使用数据参数,通常它是一个键值对,如:

data: {sCompanyID: 'test'}

我相信他们使用它的方式会导致jQuery尝试发布到http://webservice/service.asmx/getCompanyByCompanyID?sCompanyID:blah

也不是.NET Web服务SOAP?我不认为jQuery可以解析那个......

编辑没关系,没想到你把这些作为json数据传递。谢谢评论者!

答案 4 :(得分:1)

您不能对自己以外的主机进行AJAX调用。如果您真的必须这样做,请拨打您自己的服务器并使用简单的代理重定向到您需要的域。

您可以通过在网络服务器中使用ProxyPass指令来执行此操作:

ProxyPass         /service/ http://webservice/service.asmx
ProxyPassReverse  /service/ http://webservice/service.asmx

然后你可以向/ service / getCompanyByCompanyID发出一个AJAX请求,它将被代理到正确的URL。

答案 5 :(得分:0)

为了从Jquery运行您的Web服务,您应该使用WCF或通常的Web服务,但是您应该将[ScriptMethod]添加到服务的方法中,并将[ScriptService]添加到您的Web服务描述中。

哇哇哇 刚刚注意到你正试图从一个主机到另一个主机调用该服务......那个服务无效。 service应该托管在与调用它的页面相同的域中。

作为对Jeff回答的回复,格式化数据的正确方法是数据:{key:“value”}

答案 6 :(得分:0)

使用jQuery Ajax请求时,在定义要在请求中发送的变量时需要使用以下格式:

data: "variableName=variableContent",

您写道:

 data: "{'sCompanyID:' + 'test'}"

这不会有两个原因:
- 你已经包括了不需要在那里的花括号 - 您使用了分号“:”而不是等号“=”。

只要你改变这些就行了。

P.S我才刚刚意识到Jeff Fritz已经给你正确答案了。他的回答很明显!