проблема с вызовом удаленного ASMX с использованием jQuery - PullRequest
2 голосов
/ 29 мая 2009

Старался изо всех сил, чтобы понять это правильно. В чем разница между ответами XML, SOAP и JSON? И как узнать, как позвонить в веб-службу, ответ которой один из приведенных выше? (... Пожалуйста, поправьте меня, если я не в курсе)

Причина, по которой я спрашиваю об этом, потому что я пытаюсь вызвать удаленный ASMX из jQuery в моем веб-приложении .NET3.5, и не повезло вообще !! В основном я пытаюсь вызвать метод CurrencyConverter, как показано по этому адресу: http://www.webservicex.net/CurrencyConvertor.asmx?op=ConversionRate

Я вижу, что он возвращает XML, но следующий код не работает:

$('#Currency').bind('change', function() {
    var targetDiv = '#Result'
    var currencyValue = $('#Currency option:selected').attr('value')
    var webMethod = 'http://www.webservicex.net/CurrencyConvertor.asmx/ConversionRate'
    var parameters = "{'FromCurrency':'GBP','ToCurrency':'" + currencyValue + "'}"

    $(targetDiv).html('loading...');

    $.ajax({
        type: "POST",
        url: webMethod,
        data: parameters,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
            $(targetDiv).html(response.d);
        },
        error: function(response) {
            $(targetDiv).html("Unavailable:" + response);
        }
    });
});

Пожалуйста, кто-нибудь может мне помочь с этим, потому что я действительно потерян!

Спасибо!

Ответы [ 4 ]

4 голосов
/ 29 мая 2009

Я использовал этот веб-сервис раньше. Он ожидает и возвращает XML. Вот код, который я использовал для работы в Internet Explorer (для Firefox вам нужно использовать jsonp).

$('#Currency').bind('change', function() {
    var targetDiv = '#Result'
    var currencyValue = $('#Currency option:selected').val();
    var webMethod = 'http://www.webservicex.net/CurrencyConvertor.asmx/ConversionRate';
    var parameters = "?FromCurrency=GBP&ToCurrency=" + currencyValue;

    $(targetDiv).html('loading...');

    $.ajax({
        type: "GET",
        url: webMethod + parameters ,
        contentType: "text/xml; charset=utf-8", 
        dataType: "xml", //for Firefox change this to "jsonp"
        success: function(response) {
            $(targetDiv).html(response.text);
        },
        error: function(xhr, textStatus, errorThrown) {
            $(targetDiv).html("Unavailable: " + textStatus);
        }
    });
)};
2 голосов
/ 29 мая 2009

[Изменить] Другая вещь, которую вы можете попробовать, это изменить dataType в вызове JQuery на «xml». Если это не сработает, вы можете создать свой собственный прокси-веб-сервис, который вызывает удаленный, а затем вернуть данные в формате JSON.

Я подозреваю, что проблема в коде на стороне сервера. Я не уверен, будет ли это работать для вас, но вот некоторый рабочий код, который показывает, что JQuery вызывает мой WebMethod. Надеюсь, вы можете сравнить это с вашим и заставить его работать. Дайте нам знать, что решение. Надеюсь, это поможет.

[Server Code]

using System;
using System.ComponentModel;
using System.Data;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;

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

        [WebMethod]
        [ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
        public VoteCastResult CastQuestionVote(string itemID, QAForum.Bll.VoteType voteType)
        {
            try
            {
                User usr = SecurityHelper.GetOrCreateUser();
                Guid question = new Guid(itemID);
                return new QuestionVoteController().CastQuestionVote(usr, question, voteType);
            }
            catch (Exception ex)
            {
                return new VoteCastResult(VoteCastStatusType.otherIssue, 0, ex.Message);
            }
        }
    }


[JQuery Code]

    function AFTopicCastVote(clickContext, itemID, voteDirection, voteMethod)
    {
          $.ajax({
          type: "POST",
          contentType: "application/json; charset=utf-8",
          url: (AFServiceUrl + voteMethod),
          data: "{'itemID': '" + itemID + "','voteType': '" + voteDirection + "'}",
          dataType: "json",
          success: function (data, textStatus) {
                               AFTopicProcessVoteResult(clickContext, data.d);
                                //alert("data : " + data.d);
                            },

          error: function (  XMLHttpRequest, textStatus, errorThrown) 
          {
            alert("error casting vote: " + errorThrown);
          }
        });    
    }
1 голос
/ 03 января 2013

в функции загрузки страницы добавить следующие строки для клиента ....

        base.Response.AddHeader("Access-Control-Allow-Origin", "*");
        base.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
        base.Response.AddHeader("Access-Control-Allow-Headers", "X-Requested-With");
        base.Response.AddHeader("Access-Control-Max-Age", "86400");
0 голосов
/ 29 мая 2009

Проблема связана с публикацией на нескольких сайтах. Возможно, вы получаете сообщение об ошибке "Access to restricted URI denied code: 1012", поскольку вы публикуете веб-сервис в другом домене.

Пожалуйста, обратитесь этот пост на Ошибка 1012

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