2012-09-18 13 views
6

He estado tratando de configurar custom ajaxTransports for jQuery para cortocircuitar algunos flujos de trabajo en ciertos escenarios para nuestro producto. Sin embargo, no he tenido éxito en conseguir que estos transportes sean respetados (mientras que tengo muchos que trabajan custom ajaxPrefilters).Personalizado ajaxTransport función sin datos especificados tipo no está disparando (en absoluto!)

probado con varias versiones de jQuery:

  • 1.5.2
  • 1.6.4
  • 1.7.2
  • 1.8.0

Probado con múltiples navegadores:

  • Firefox 15
  • Chrome 21
  • iOS 5 webviews

...

Ninguno de ellos funcionó.

caso de prueba jsFiddle:http://jsfiddle.net/PVYut/

...

Si añado un dataType limitar la búsqueda, entonces funciona bien.

caso prueba jsFiddle:http://jsfiddle.net/PVYut/1/

...

solo estoy haciendo algo mal? Estaría feliz de que me lo dijeran, ¡siempre y cuando pueda hacer que esto funcione! -_-

Respuesta

4
$.ajaxTransport("+*", function(options, originalOptions, jqXHR, headers, completeCallback ) { 
    console.log("Executing ajaxTransport"); 
    return { 
     send: function(headers, completeCallback) { 
      completeCallback(404, "error", {}); 
     }, 
     abort: function() { 
      /* abort code */ 
     } 
    } 
}); 

$.ajax("?jqTrans=" + (+(new Date()))) 
    .done(function() { 
     console.log("ERROR: Should not have been successful!"); 
    }) 
    .fail(function() { 
     console.log("SUCCESS: Should have failed."); 
    }); 

Aquí es jsFiddle

+1

Niza, gracias! Otro caso de documentación deficiente para jQuery. = ( –

+2

Por lo general, los transportes se utilizan como retrocesos. Nunca debe confiar en pedidos de transporte como este (por lo tanto, no está documentado). Cree un prefiltro, redirija a otro tipo de datos y capture este tipo de datos con su transporte personalizado es el camino a seguir Perdón por llegar tarde a la fiesta –

+0

@JulianAubourg Consideré hacer exactamente lo que describiste, pero la idea de oscurecer el verdadero 'dataType' me desalentó. En el mejor de los casos, podrías almacenar el valor real' dataType' en una nueva propiedad en el objeto 'options' /' settings' para la solicitud en el prefiltro y luego restaurarlo a la propiedad 'dataType' en el transporte. Doable pero lo hace sentir más hackier. –

Cuestiones relacionadas