2012-09-18 4 views
6

Ho cercato di impostare custom ajaxTransports for jQuery per cortocircuitare alcuni flussi di lavoro in determinati scenari per il nostro prodotto. Tuttavia, non ho avuto successo nell'ottenere questi trasporti da onorare (mentre ho molti che lavorano custom ajaxPrefilters).Funzione ajaxTransport personalizzata senza dati specificatiIl tipo non viene attivato (A TUTTI!)

collaudata con più versioni di jQuery:

  • 1.5.2
  • 1.6.4
  • 1.7.2
  • 1.8.0

Testato con multipla browser:

  • Firefox 15
  • Chrome 21
  • iOS 5 visualizzazioni

...

Nessuno di loro ha lavorato.

JsFiddle banco di prova:http://jsfiddle.net/PVYut/

...

Se posso aggiungere un dataType per restringere il campo, allora funziona benissimo.

caso JsFiddle prova:http://jsfiddle.net/PVYut/1/

...

sto solo facendo qualcosa di sbagliato tutto? Sarei felice di sentirmi detto, finché riuscirò a farlo funzionare! -_-

risposta

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."); 
    }); 

Ecco jsFiddle

+1

Nizza, grazie! Un altro caso di scarsa documentazione per jQuery. = ( –

+2

In genere, i trasporti vengono utilizzati come fallback. Non devi mai fare affidamento sull'ordine di trasporto in questo modo (quindi perché non è documentato). Creare un prefiltro, reindirizzare a un altro dataType e acquisire questo dataType con il tuo trasporto personalizzato è la strada da percorrere Mi dispiace di essere in ritardo per la festa –

+0

@JulianAubourg Ho pensato di fare esattamente quello che hai descritto, ma il pensiero di oscurare il vero 'dataType 'mi ha messo fuori. Al massimo, potresti memorizzare il valore reale' dataType' in una nuova proprietà su l'oggetto 'options' /' settings' per la richiesta nel prefiltro e quindi lo ripristina nella proprietà 'dataType' nel transport.Facile ma lo fa sembrare un hacker. –

Problemi correlati