Использование веб-службы ASP с помощью jQuery - PullRequest
3 голосов
/ 20 марта 2012

Я нашел несколько других вопросов по этому поводу, но они не сработали для меня :( Поэтому я отправляю свой собственный вопрос:

Я сделал веб-сервис ASP.NET в моно. Кодпотому что это:

using System;
using System.Web;
using System.Web.Services;

namespace testWebservice
{
    public class ws : System.Web.Services.WebService
    {
        public ws() {

        }
        [WebMethod]
        public String sendCar()
        {
            return "44.435006,26.102314";
        }
    }
}

Я пытаюсь вызвать этот веб-сервис с веб-сайта, используя jQuery:

function getCar()
{
    $.ajax( {
    type:'POST',
    url:'http://127.0.0.1:8080/ws.asmx/sendCar',
    contentType: "application/json; charset=utf-8",  
    data: "{}",
    dataType: "json",
    success:function(msg) {
      AjaxSucceeded(msg);  
    },  
    error: AjaxFailed
    })   
    function AjaxSucceeded(result) {   
              alert(result.d);   
          }  
    function AjaxFailed(result) {   
              alert(result.status + ' ' + result.statusText);   
          }         
}   

Когда я запускаю страницу, я получаю предупреждение «0 ошибка»Кто-нибудь может дать мне совет, пожалуйста?

Ответы [ 3 ]

1 голос
/ 21 марта 2012

Ваш код в сервисе неверен.По крайней мере, вам не хватает атрибута

[System.Web.Script.Services.ScriptService]

в вашем классе ws.

На http://www.tomot.de/en-us/article/8/asp.net/how-to-use-jquery-to-call-a-webservice-asmx-method Я разместил образец, который работал на меня пару дней назад.

Имейте в виду, что для изменения типа возвращаемого значения с String на что-то еще требуется отправка реальных объектов json.

1 голос
/ 25 марта 2012

Для работы сервиса вам необходимо:

Добавьте в свой проект ссылку на System.Web.Extension.

Добавьте using System.Web.Script.Services; к своему источнику ws.

Добавить:

[ScriptService]

в ваш класс.

Добавить:

    <remove verb="*" path="*.asmx"/>
    <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

внутри вашего web.config под тегом <httpHandlers>.

Если вы звоните getCar() от нажатия кнопки, добавьте return false; после вызова метода, чтобы щелчок не вызвал обратную передачу.

Например:

[Default.aspx]

<%@ Page Language="C#" Inherits="testWebservice.Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head runat="server">
    <title>jQuery Web Service call from Mono using JSON</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script type="text/javascript">
        function getCar()
        {
            $.ajax( {
            type:'POST',
            url:'http://127.0.0.1:8080/ws.asmx/sendCar',
            contentType: "application/json; charset=utf-8",  
            data: "{}",
            dataType: "json",
            success:function(msg) {
              AjaxSucceeded(msg);  
            },  
            error: AjaxFailed
            })   
            function AjaxSucceeded(result) {   
                      alert(result.d);   
                  }  
            function AjaxFailed(result) {   
                      alert(result.status + ' ' + result.statusText);   
                  } 
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:Button runat="server" id="btnTest" Text="Call WebService" OnClientClick="getCar(); return false;" />
    </form>
</body>
</html>

[ws.asmx.cs]

using System;
using System.Web;
using System.Web.Script.Services;
using System.Web.Services;

namespace testWebservice
{
    [ScriptService]
    public class ws : System.Web.Services.WebService
    {
        public ws() {

        }
        [WebMethod]
        public String sendCar()
        {
            return "44.435006,26.102314";
        }
    }
}

[web.config]

<?xml version="1.0"?>
<!--
Web.config file for testWebservice.

The settings that can be used in this file are documented at 
http://www.mono-project.com/Config_system.web and 
http://msdn2.microsoft.com/en-us/library/b5ysx397.aspx
-->
<configuration>
  <system.web>
    <compilation defaultLanguage="C#" debug="true">
      <assemblies>
        <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      </assemblies>
    </compilation>
    <customErrors mode="RemoteOnly">
    </customErrors>
    <authentication mode="None">
    </authentication>
    <authorization>
      <allow users="*" />
    </authorization>
    <httpHandlers>
        <remove verb="*" path="*.asmx"/>
        <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    </httpHandlers>
    <trace enabled="false" localOnly="true" pageOutput="false" requestLimit="10" traceMode="SortByTime" />
    <sessionState mode="InProc" cookieless="false" timeout="20" />
    <globalization requestEncoding="utf-8" responseEncoding="utf-8" />
    <pages>
    </pages>
  </system.web>
</configuration>
0 голосов
/ 20 марта 2012

Насколько я вижу, вы используете старый веб-сервис в стиле asp.net 2.0. Почему вы устанавливаете JSON в качестве типа отправляемых данных? Я не думаю, что это подходит для таких веб-сервисов

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