jQuery AJAX Web服务仅在本地工作

时间:2010-06-15 14:02:52

标签: jquery ajax web-services

我有一个简单的ASP.NET Web服务

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class Service : System.Web.Services.WebService
{
    public Service () {
    }

    [WebMethod]
    public string SetName(string name) {
        return "hello my dear friend " + name;

    }
}

对于此Web服务,我创建了虚拟目录,因此我可以通过编带来接收访问权限 http://localhost:89/Service.asmx

我尝试通过简单的html页面使用jQuery调用它。为此我使用函数

CallWS() {
         $.ajax({
             type: "POST",
             data: "{'name':'Pumba'}",
             dataType: "json",
             url: "http://localhost:89/Service.asmx/SetName",
             contentType: "application/json; charset=utf-8",
             success: function (msg) {
                 $('#DIVid').html(msg.d);

             },
             error: function (e) {
                 $('#DIVid').html("Error");
             }
         });

最有趣的事实:如果我使用我的WebService在项目中创建html页面并将url更改为Service.asmx / SetName,那么一切都很好。 但是,如果我尝试远程调用此Web服务 - 成功函数可以正常工作,但msg为空。

之后,我尝试通过SOAP调用此服务。它是相同的 - 在本地它运作良好,但远程 - 根本没有。

  var ServiceUrl = 'http://localhost:89/Service.asmx?op=SetName'; 

  function beginSetName(Name) {
      var soapMessage = '<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <SetName xmlns="http://tempuri.org/"> <name>' + Name + '</name> </SetName> </soap:Body> </soap:Envelope>';
      $.ajax({
          url: ServiceUrl,
          type: "POST",
          dataType: "xml",
          data: soapMessage,
          complete: endSetName,
          contentType: "text/xml; charset=\"utf-8\""
      });

      return false;
  }

function endSetName(xmlHttpRequest, status)
{
    $(xmlHttpRequest.responseXML)
    .find('SetNameResult')
    .each(function () {
        var name = $(this).text();
        alert(name);
    });
 }

在这种情况下,状态的值为“parseerror”。 你能帮我解决这个问题吗?如何通过jQuery通过url远程调用另一个WebService。

提前谢谢你, 格雷格

2 个答案:

答案 0 :(得分:1)

由于Same Origin Policy,您需要修改AJAX以使用JSONP而不是JSON。查看jQuery Cross-Domain Ajax Guide

答案 1 :(得分:0)

Pointy是正确的,但要解决此问题,您需要公开可从应用程序外部调用的端点。

我建议你看一下使用WCF创建JSON Web服务。