2015-08-24 29 views
7

Aggiungo una nuova funzione nella mia app che consente agli utenti di completare un processo in fasi.Impossibile pubblicare un nuovo metodo di azione tramite .Ajax subito dopo XMLHttpRequest riuscito in IE 10

Step1 selezionare il valore discesa

pulsante Avanti colpire e step 2 (ajax richiesta carichi e rende una vista parziale, il rendering di una struttura ad albero)

pulsante colpire prossimo

fase 3 (carica una file tramite XMLHttpRequest)

tasto colpire prossimo

Fase 4 (un'altra richiesta AJAX è fatta per rendere una vista parziale) Per qualche motivo questa richiesta non colpirà mai il metodo di azione del controllore. Che cosa è strano è che se posto al metodo di azione nel passaggio 2, pubblicherà correttamente, ma ho diverse azioni per questo passaggio.

sto ottenendo i seguenti avvisi in IE 10 Strumenti per sviluppatori

SEC7127: Redirect è stato bloccato per la richiesta CORS.

XMLHttpRequest: errore di rete 0x800c0014, si è verificato un problema di reindirizzamento . SCRIPT7002: XMLHttpRequest: errore di rete 0x800c0014, si è verificato un problema di reindirizzamento .

Gli errori di cui sopra sembrano essere correlati al XMLhhtprequest prima di questo passaggio. Ho provato a impostare XMLhttprequest su NULL o provare a disporlo sul suo evento di successo. Non capisco al punto 4 Posso ancora postare l'azione del passaggio 2 ma non uno diverso?

fase 3

function handleFiles() { 

     var formdata = new FormData(); //FormData object 
     var xhr = new XMLHttpRequest(); 
     xhr.open('POST', fileUploadURL); 
     xhr.setRequestHeader('Content-type', 'multipart/form-data'); 

     //Appending file information in Http headers 
     xhr.setRequestHeader('X-File-Name', document.getElementById('myFile').files[0].name); 
     xhr.setRequestHeader('X-File-Type', document.getElementById('myFile').files[0].type); 
     xhr.setRequestHeader('X-File-Size', document.getElementById('myFile').files[0].size); 

     //Sending file in XMLHttpRequest 
     xhr.send(document.getElementById('myFile').files[0]); 
     xhr.onreadystatechange = function() { 
      if (xhr.readyState == 4 && xhr.status == 200) { 
       $("input[id=filestoredname]").val(xhr.responseText); 
       alert("file saved.."); 

      } 
     } 
       return false; 
    } 

var instrumentSelectionUrl = '@Url.Action("Step2", "ErrorCode")';//step2 
var finalTreeViewUrl = '@Url.Action("renderFinalTree", "ErrorCode")';//step3 
var fileUploadURL = '@Url.Action("UploadFiles", "ErrorCode")';//step3 


$(function() { 
    $('form').stepy({ 
     backLabel: '<<', 
     nextLabel: '>>', 
     finishButton: false, 
     next: function (index) { 
      alert(index); 
      var v = $("#InsIdLst").chosen().val(); 
      if (v == null && index == 2) { 
       alert("Please select an Instrument"); 
       return false; 
      } 
      if (v != null && index == 2) { 
       var overlay = $('<div></div>').prependTo('body').attr('id', 'overlay'); 
       $.ajax({ 
        type: 'POST', 
        url: instrumentSelectionUrl, 
        cache: false, 
        datatype: "html", 
        data: $("form").serialize(), 
        success: function (result) { 
         $("#errorCodes").html(result); 
         overlay.remove(); 
        } 
       }); 
      } 
      if (index == 4) { 
       alert("try.."); 
       $.ajax({ 
        type: 'POST', 
        url: finalTreeViewUrl, 
        cache: false, 
        datatype: "html", 
        data: $("form").serialize(), 
        success: function (result) { 
         $("#errorCodesSave").html(result); 
        } 
       }); 
      } 

     } 
    }); 
}); 
+0

Sembra che la richiesta del passaggio 3 sia bloccata da un rilevamento incrociato; se non dovesse mai completarsi, potrebbe essere che lasci il browser in uno stato incerto e quindi incapace di tentare la successiva richiesta XHR. Se tu fossi in grado di confermare/risolvere il problema di origine incrociata, scommetto che l'altro problema si risolverebbe da solo. –

+0

La richiesta xmlhttp 2 di Step 3 ha esito positivo anche se per caricare il file e ottengo una risposta positiva. Nel passaggio 4, che è dopo il caricamento del file, non riesco a pubblicare su un nuovo stesso metodo di azione del controller di dominio "renderfinaltree/errorcode". Al punto 4 posso ancora registrare l'azione del controller dal passaggio 2 "Step2, errorCode". Questo è nella mia macchina di sviluppo .. È davvero un problema CORS quando ottengo questo "SEC7127: Redirect è stato bloccato per richiesta CORS" –

+0

Quindi al punto 4 se uso $ ("# errorCodesSave"). Load (finalTreeViewUrl, {fileName : $ ("# filestoredname"). val(), $ ("# InsIdLst"). chosen(). val() ;: 1}); anziché $ Ajax, registra l'azione del controllore previsto. Funziona abbastanza bene per me, sto solo per assicurarmi che il resto dei metodi Ajax in questa vista funzionino come previsto. –

risposta

3

Quindi, al punto 4 se uso

$("#errorCodesSave").load(finalTreeViewUrl, { fileName: $("#filestoredname").val(), $("#InsIdLst").chosen().val();: 1 }); 

invece di $ Ajax, lo fa inviare l'azione di controllo previsto. Questo funziona abbastanza bene per me.