Web-сервис jQuery AJAX работает только локально - PullRequest
2 голосов
/ 15 июня 2010

У меня есть простая веб-служба ASP.NET

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

    }
}

Для этой веб-службы я создал виртуальный каталог, чтобы получить доступ, нажав 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");
             }
         });

Самый интересный факт: если я создаю html-страницу в проекте с помощью моего WebService и меняю URL на Service.asmx / SetName, все работает отлично. Но если я попытаюсь вызвать этот веб-сервис удаленно - функция успеха будет работать, но 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». Не могли бы вы помочь мне решить эту проблему? Что я должен сделать для удаленного вызова другого WebService по URL через jQuery.

Заранее спасибо, Грег

Ответы [ 2 ]

1 голос
/ 15 июня 2010

Из-за той же политики происхождения вам нужно будет изменить ваш AJAX, чтобы использовать JSONP вместо JSON.Ознакомьтесь с JQuery междоменным Ajax Guide .

0 голосов
/ 15 июня 2010

Pointy - это правильно, но для решения этой проблемы вам нужно предоставить конечную точку, которая может вызываться извне приложения.

Я предлагаю вам взглянуть на создание веб-служб JSON с использованием WCF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...