2011-02-28 14 views
8

Lo siento si esta respuesta parece similar a otras preguntas en este sitio web, pero no pude encontrar lo que necesito.Operación ilegal en el objeto prototipo WrappedNative

tengo este código:

$.ajax({ 
      url: '../../cgi-bin/executeQuery', 
      type: 'GET', 
      data: ({siid:5185,of:"xmlWithColID"}), 
      dataType: 'xml', 
      success: function(xmlR){ 
        try{ 
          $.ajax({ 
            url: '../../cgi-bin/authList.py', 
            type: 'GET', 
            data: ({xmlToFormat:xmlR,service:"paperList"}), 
            dataType: 'xml', 
            success: function(data){ 
              try{ 
                displayResult(data,loadXMLDoc("js/authList/paperTableStyle.xsl"),"divPaperTable"); 
              }catch(e){ 
                console.log(e.message); 
              } 
            }, 
            complete: function(XMLHttpRequest, textStatus){ 
              $('#divMakingAuthorList').addClass('secondary'); 
              $('#divMakingAuthorList').hide(); 
            } 
          }); 
        }catch(e){ 
          console.log(e.message); 
        } 
      } 
    }); 

que me da el siguiente error en FF: "La operación ilegal en WrappedNative objeto prototipo".

Cuando eliminé la parte "correcta" de mi código, el mensaje de error todavía estaba allí. Después, eliminé la parte "completa" y el mensaje de error estaba allí también. Pero luego, cuando eliminé la siguiente línea de mi código: data: ({xmlToFormat: xmlR, service: "paperList"}), El mensaje había desaparecido.

Pero no entiendo el motivo. ¿Es posible enviar "xml" a mi CGI como datos en un evento ajax?

Gracias

+1

Lo que tienes en la línea de datos parece JSON, no XML. – justkt

+1

Recibo este error muy a menudo cuando uso la extensión de Pentadactyl para FireFox que es muy, muy molesto. – trss

Respuesta

7

Ese mensaje de error normalmente se refiere a cuando intenta envolver una función nativa, como por ejemplo "eval"

Si haces algo como esto -



(function() { 

    var t = eval; 

    eval = function() { 
     t.apply(window, arguments); 
    } 

}(); 

Firefox ganó' Te permite usar eval más porque la firma de la función ya no coincide con su punto de referencia interno y lo considera una táctica desviada. Creo que es completamente estúpido y viola la premisa de la flexibilidad de JavaScript, pero es con lo que ahora tenemos que lidiar.

Igual vale para algo como var x = document.createElement; Llamar a x ('div') hará que Firefox gime como un emo adolescente.

Supongo que cuando xmlR no se pasa a la segunda solicitud ajax, la solicitud falla y, por lo tanto, nunca se llama al bloque de éxito. Sé que mencionas que probaste la llamada sin el bloque de éxito y seguiste viendo el mensaje, pero tal vez podrías volver a intentarlo con una función de éxito vacía para confirmar.

Revisaré lo que está sucediendo en displayResult y loadXMLDoc, y creo que las comprobaciones de seguridad de la operación ilegal se agregaron recientemente a FireFox así que si puedes probar una versión anterior como 3.0, puedes confirmar esta distinción.

De lo contrario, no veo nada flagrante con el código que proporcionó y el envío de datos XML es completamente válido con ajax.

Cuestiones relacionadas