#desenvolvimento

Resolvendo o erro: Error calling method on NPObject


Olá pessoal.

Este é um daqueles post com soluções para os problemas do dia a dia. Recentemente eu precisei resolver o erro Uncaught Error: Error calling method on NPObject ocorrido em um projeto web desenvolvido com ASP.NET MVC3.

O tal erro acontecia ao submeter um determinado formulário. Mas só acontecia se em algum dos campos contivessem um & em seu conteúdo.

Este formulário continha um upload de imagem utilizando o Uploadify. E o erro acontecia no momento de executar a função uploadifyUpload() do plugin. Mais especificamente na linha abaixo:

document.getElementById(jQuery(this).attr('id') + 'Uploader').startFileUpload(ID, checkComplete);

Pesquisando e tentando solucionar este erro nada descritivo, identifiquei que o conteúdo do formulário era serializado antes de ser submetido. E quando isso acontecia o & era convertido para %26.

Então, resolvi substituir o & pelo unicode equivalente. Após serializar o objeto eu troquei o & pelo seu unicode \u0026 antes de chamar a função uploadifyUpload(). E o código ficou assim:

...
if ($('.uploadifyQueueItem').length > 0) {
   var conteudoForm= $("#id_form").serializeObject();
   var campo = conteudoForm['id_campo'];
   conteudoForm['id_campo'] = campo.replace('&', '\\u0026');
   $('.upload').uploadifySettings('scriptData', conteudoForm);
   $('.upload').uploadifyUpload();
}

Erro resolvido e formulário submetido normalmente. Tudo lindo, ou melhor, quase. O valor do campo está chegando com o unicode e precisamos voltar para o &.

No meu caso utilizando o ASP.NET MVC 3 recebo o conteúdo do formulário no método Create e faço a conversão lá mesmo:

[HttpPost]
public ActionResult Create(ModelQualquer modelQualquer, HttpPostedFileBase Filedata) {

   modelQualquer.Atributo = modelQualquer.Atributo.Replace("\\u0026", "&");
   ...
}

Agora sim, ta certo.

A solução foi bem idiota boba e deve ter umas 1000, ou mais, maneiras melhores de se resolver. O mais chatinho foi encontrar onde realmente estava o problema, já que o erro não diz nada muita coisa.

É isso, galera. Espero que possa ser útil e fiquem a vontade para postar outras soluções nos comentários.

Até breve 😉

Anúncios
Padrão

11 comentários sobre “Resolvendo o erro: Error calling method on NPObject

  1. Diego disse:

    Oi Brena, estava com esse problema em um formulário do ASP.NET MVC 4 e foi por conta da extensão do banco Itaú no Chrome…
    Obrigado pela postagem, deu uma luz pra poder resolver kkk

  2. Oi Brena, obrigado pela dica, desembolou minha vida aqui!
    O meu problema era um pouco diferente, eu tinha um iframe onde o src apontava para uma url com & e parece que o chrome no windows as vezes aceita e as vezes dah o mesmo erro do NPObject.
    No meu caso eu troquei o & pelo & e parece que corrigiu.
    De toda forma, valeu!
    Abs!

  3. Estou com a mesma zica, mas sem saber ao certo o que fazer. Pelo seu post, entendo que esse erro pode rolar pelos mais variados motivos.
    No meu caso, o erro aponta pra uma linha logo após a declaração do DOCTYPE. Apesar de ser erro, não impede que o JS continuem executando normalmente na página. Então a vontade de arrumar fica só por conta de me incomodar com aqueles avisos de erro no chrome.

    • Exatamente Thyago.

      É difícil identificar a real causa do problema, na maioria das vezes está em algum plugin JS utilizado na página. Mas pelo console não dá pra identificar em qual linha o erro está acontecendo.

      O que tem na linha que acusa erro?

      Até breve.

      • Ele aponta diretamente no html, uma linha após a declaração do DOCTYPE do documento. O engraçado é que as tags de script só aparecem várias linhas abaixo. No início achei que pudesse ter alguma coisa a ver com o encoding do arquivo, mas não é o caso. Então por enquanto fica assim mesmo, já que não está impedindo o site de funcionar.
        xD

        • Eu estava com esse mesmo problema no doctype. No meu caso o que aconteceu foi o seguinte:
          Na layout.cshtml eu renderizo uma section chamada scripts onde coloco todos os scripts da página.
          Nas páginas que usavam a layout.cshtml eu estava colocando a section scripts e logo abaixo a tag script para carregar outros elementos.

          Veja o exemplo abaixo
          Código com erro:

          @section scripts{
          var i;
          i = 1 + 1;
          console.log(i);
          }

          var j;
          j = ViewData[“viewdata”];

          Quando eu coloquei todos os scripts dentro da section o problema foi resolvido:

          Exemplo:

          @section scripts{
          var i;
          i = 1 + 1;
          console.log(i);

          var j;
          j = ViewData[“viewdata”];

          }

          • O wordpress removeu as tags scripts. O código dentro da tag está desta forma:

            s cript type=”text / javascript”
            var j;
            j = ViewData[“viewdata”];
            / script

            removi as chaves para poder postar a resposta

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s