none
Como efetuar requisições Ajax, com Jquery, em domínios diferentes? RRS feed

  • Pergunta

  • Pessoal, sou novato em programação  Web em .Net , estou acostumado a desenvolver Web Services em java.

    Estou em uma aplicação de nível didático onde consigo na mesma aplicação,  disponibilizar um serviço com resposta em json e consumi - lo na mesma aplicação. Mas o que preciso é:  Em uma aplicação deixar o serviço disponivel em json e em outra consumir esse json para preencher meus compontents html.

    Em geral o que está acontecendo é, levanto meu servidor no visual studio local, e abro outro visual studio na mesma máquina para abrir a aplicação cliente. Mas quando tento fazer a requisição ajax na aplicação cliente, aparece o seguinte erro -> "No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access."

    pesquisando um pouco na internet, descobri que é uma restrição de segurança dos navegadores, e que tenho de habilitar um tal de 

    CORS (Cross-Origin Resource Sharing). 

     Mas não encontrei nada definitivo sobre o assunto em C#. Alguem sabe alguma coisa sobre isto ou tem uma solução diferente para o erro citado acima?


    Wagner dos Santos

    quinta-feira, 18 de dezembro de 2014 01:20

Todas as Respostas

  • Você pode informar que sua requisição se trata de um CrossDomain na própria requisição ajax, que por default, é desativada. Por exemplo:

    $.ajax({
        type: 'POST',
        crossDomain: true,
        url: "http://caminho.com/Servico.asmx/Metodo",
        success: function (responseData, textStatus, jqXHR) {
            console.log("foi");
        },
        error: function (responseData, textStatus, errorThrown) {
            alert('ñ foi.');
        }
    });

    Para referência, segue: http://api.jquery.com/jquery.ajax/

    Além da propriedade "crossDomain", você tem outras que podem lhe ser útil, como forçá-lo a ser sincrono (útil em alguns casos), usar jsonp, não fazer parse dos dados de retorno, eventos de processamento, etc...


    quinta-feira, 18 de dezembro de 2014 11:25
  • Bom, testei a linha que você postou -> 'crossDomain = true' e outras coisas mais que vi na internet. O erro continou a aparecer, o tal de No 'Access-Control-Allow-Origin'. Temo qua ainda não tive a manha com CORS. 

    Em tentativas frustantes acabei testando no Internet Explorer e deu certo. Dai Buscando informações vi que posso ativar o cross domain por navegador ou instalando extensões (foi o que fiz no chrome) instalei um tal de 'Allow-Control-Allow-Origin: * '. Deu certo também, mas ainda não achei nada para o FireFox, vejo que talvez não seria a melhor solução  a que escolhi.

    Em fontes alternativas, cujas referencio logo abaixo, dizem que tenho de passar no cabeçalho de resposta do servidor algumas linhas. Mas não entendi como fazer isto, e onde colocar exatamente as linhas que os links demonstram.

    http://stackoverflow.com/questions/667519/firefox-setting-to-enable-cross-domain-ajax-request

    http://www.webdavsystem.com/ajax/programming/cross_origin_requests

    Alguem tem algum palpite de algo que eu possa fazer nesta situação, ou que saiba como executar as ações exemplificadas nos dois links acima?

    Minha chamada no código 'cliente' atual está logo abaixo. Lembrando que ela funciona quando ativo a extensão do chrome que premite o uso de CORS. Gostaria de fazer de outro jeito se possivel

        $.ajax({
            type: "POST",
            url: "http://localhost:3386/WebService.asmx/RetornaPessoas",
            data: null,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: true,
            cache: false,
            success: function (data, textStatus, jqXHR) {
                debugger;
                console.log(JSON.parse(data.d));
                $scope.pessoas = JSON.parse(data.d); 
                //alert(data.d);
            },
            error: function (data, textStatus, jqXHR) {
                debugger;
                console.log(data);
                //alert(data);
            }
        });


    Wagner dos Santos

    sexta-feira, 19 de dezembro de 2014 15:01