jQuery Call to WebService devuelve el error "No Transport"


Tengo el siguiente servicio web;

    [WebMethod]
    public string HelloWorld()
    {
        return "Hello World";
    }

Es estándar de stock sin alteraciones a los decoradores de clase.

Tengo este método jQuery;

var webMethod = "http://localhost:54473/Service1.asmx/HelloWorld"; 

$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    data: "{}",  
    dataType: "json",
    url: webMethod,
    success: function(msg){ alert(msg.d); },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        alert(errorThrown);
          }
});

Es una acción post porque más tarde necesito publicar datos en ella.

Cuando ejecutojquery obtengo un error "No transport" devuelto.

Una cosa que también debo mencionar es que el jQuery se almacena en un simple archivo HTML en mi máquina y el servicio WEB se está ejecutando en mi máquina también.

Hay no hay código detrás en la página HTML es simplemente una página web y no un proyecto de c# ni nada.

¿Puede alguien por favor señalarme en la dirección correcta aquí?

Author: Joachim Sauer, 2011-03-09

7 answers

Si su página de jQuery no se está cargando desde http://localhost:54473, este problema es probablemente porque está tratando de hacer una solicitud entre dominios.

Actualización 1 Echa un vistazo a esta entrada de blog.

Actualización 2 Si este es el problema (y sospecho que lo es), es posible que desee revisar JSONP como una solución. Aquí hay algunos enlaces que podrían ayudarlo a obtener iniciado:

 95
Author: no.good.at.coding,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-08 17:42:05

Añadir esto: jQuery.support.cors = true;

Permite cross-site scripting en jQuery (introducido después de 1.4 x, creo).

Estábamos usando una versión muy antigua de jQuery (1.3.2) y la cambiamos por la 1.6.1. Todo funcionaba, excepto .llamadas ajax (). Agregar la línea anterior solucionó el problema.

 251
Author: SrBlanco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-01 15:40:25

Tuve el mismo error en una página, y agregué estas líneas:

<!--[if lte IE 9]>
<script type='text/javascript' src='//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js'></script>
<![endif]-->

Y finalmente funciona para mí ;) no más error en IE9.

 26
Author: bsuttor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-11 21:10:39

Ninguna de las respuestas propuestas funcionó completamente para mí. Mi caso de uso es ligeramente diferente (haciendo un ajax llegar a un S3 .archivo json en IE9). Setting jQuery.support.cors = true; se deshizo del error No Transport pero todavía estaba recibiendo errores Permission denied.

Lo que funcionó para mí fue usar el jQuery-ajaxTransport-XDomainRequest para forzar a IE9 a usar XDomainRequest. El uso de esto no requiere la configuración jQuery.support.cors = true;

 7
Author: rynop,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-19 16:22:54

Lo resuelvo usando DataType = 'jsonp' en el lugar de dataType='json'

 6
Author: Abhishek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-13 07:30:50

Yo también tuve este problema y todas las soluciones dadas anteriormente fallaron o no fueron aplicables debido a las restricciones del servicio web del cliente.

Para esto, agregué un iframe en mi página que residía en el servidor del cliente. Así que cuando publicamos nuestros datos en el iframe y el iframe luego lo publica en el servicio web. Por lo tanto, se elimina la referencia entre dominios.

Agregamos una comprobación de origen de 2 vías para confirmar que solo la página autorizada publica datos hacia y desde el iframe.

Espero que ayuda

<iframe style="display:none;" id='receiver' name="receiver" src="https://iframe-address-at-client-server">
 </iframe>

//send data to iframe
var hiddenFrame = document.getElementById('receiver').contentWindow;
hiddenFrame.postMessage(JSON.stringify(message), 'https://client-server-url');

//The iframe receives the data using the code:
window.onload = function () {
    var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
    var eventer = window[eventMethod];
    var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
    eventer(messageEvent, function (e) {
        var origin = e.origin;
        //if origin not in pre-defined list, break and return
        var messageFromParent = JSON.parse(e.data);
        var json = messageFromParent.data;

        //send json to web service using AJAX   
        //return the response back to source
        e.source.postMessage(JSON.stringify(aJAXResponse), e.origin);
    }, false);
}
 0
Author: Riju Mahna,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-17 17:03:39

Lo resolví simplemente eliminando el dominio de la url de la solicitud.

Before: https://some.domain.com/_vti_bin/service.svc

After: /_vti_bin/service.svc
 -1
Author: Draghon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-05 19:29:05