随机误差 "Unexpected token in JSON"

Random error "Unexpected token in JSON"

我正在使用 AngularJS 开发网站,我在 API 中进行多项选择以列出类似的产品,但我无法列出这些项目,因为在某些情况下,JSON returns: SyntaxError: Unexpected token in JSON at position 2512.我的代码是:

$timeout(function() {
            console.log(id_filtroParecido);
            Conecta('get','getProdutosFiltrados', id_filtroParecido).then(function(val) {
                vm.respostaListaParecidos = val;
            });
        }, 100);

在上面的代码中,函数 Conecta 在数据库中进行搜索,return搜索 JSON。但它不可预测,因为它有时会起作用,但有时会失败。

这里是 JSON 我收到并且工作正常的示例:

[{"id_produto":"1","nome_produto":"Epson Impressora 1","ativo_produto":"1","destaque_produto":"1","sob_encomenda_produto":"1","marcadagua_produto":"0","descricao_produto":"<p>Descri&ccedil;&atilde;o da impressora Epson 1</p>","informacao_produto":"<p>Impressora a Raio Lazer</p>","tags_produto":"Impressora, Lazer, Epson","ordem":"1","acessos":"0","marca_produto":"","slug_produto":"1-epson-impressora-1","imagem_principal":"288738cdb4b99c10e877a25089d46074.jpeg","tamanho":[{"id_produto_tamanho":"43","nome_produto_tamanho":"7- Padr\u00e3o","valor_produto_tamanho":"1500.00","quantidade_produto_tamanho":"200","comprimento_produto_tamanho":"16","altura_produto_tamanho":"16","largura_produto_tamanho":"16","peso_produto_tamanho":"16","promocao_valor_produto_tamanho":"0.00","parcelamento_produto_tamanho":"N\u00e3o","tem_promocao_produto_tamanho":"0"}]},{"id_produto":"2","nome_produto":"Impressora Epson 2","ativo_produto":"1","destaque_produto":"0","sob_encomenda_produto":"0","marcadagua_produto":"0","descricao_produto":"<p>Descri&ccedil;&atilde;o da impressora Epson 2</p>","informacao_produto":"<p>Informa&ccedil;&otilde;es t&eacute;cnicas da impressora Epson 2</p>","tags_produto":"","ordem":"1","acessos":"0","marca_produto":"","slug_produto":"2-impressora-epson-2","imagem_principal":"c38bf5d110a03964740266c3ee43e123.jpeg","tamanho":[{"id_produto_tamanho":"42","nome_produto_tamanho":"5-\u00danico","valor_produto_tamanho":"500.00","quantidade_produto_tamanho":"199","comprimento_produto_tamanho":"16","altura_produto_tamanho":"16","largura_produto_tamanho":"16","peso_produto_tamanho":"16","promocao_valor_produto_tamanho":"0.00","parcelamento_produto_tamanho":"Sim","tem_promocao_produto_tamanho":"0"}]}]

这里有一个 JSON 的例子,有时 return 错误,有时却没有:

[{"id_produto":"6","nome_produto":"HP G42-214BR","ativo_produto":"1","destaque_produto":"1","sob_encomenda_produto":"0","marcadagua_produto":"0","descricao_produto":"<p>Descri&ccedil;&atilde;o do note HP</p>","informacao_produto":"<p>Informa&ccedil;&otilde;es do note JP</p>","tags_produto":"tag1, tag2, tag3","ordem":"1","acessos":"0","marca_produto":"","slug_produto":"6-hp-g42-214br","imagem_principal":"87c2ee41b5b8fc13db9a3c2db655667b.png","tamanho":[{"id_produto_tamanho":"54","nome_produto_tamanho":"1- Padr\u00e3o","valor_produto_tamanho":"1500.00","quantidade_produto_tamanho":"352","comprimento_produto_tamanho":"16","altura_produto_tamanho":"16","largura_produto_tamanho":"16","peso_produto_tamanho":"9","promocao_valor_produto_tamanho":"0.00","parcelamento_produto_tamanho":"Ou em 10x de R0.00","tem_promocao_produto_tamanho":"0"}]},{"id_produto":"1","nome_produto":"Epson Impressora 1","ativo_produto":"1","destaque_produto":"1","sob_encomenda_produto":"1","marcadagua_produto":"0","descricao_produto":"<p>Descri&ccedil;&atilde;o da impressora Epson 1</p>","informacao_produto":"<p>Impressora a Raio Lazer</p>","tags_produto":"Impressora, Lazer, Epson","ordem":"1","acessos":"0","marca_produto":"","slug_produto":"1-epson-impressora-1","imagem_principal":"288738cdb4b99c10e877a25089d46074.jpeg","tamanho":[{"id_produto_tamanho":"43","nome_produto_tamanho":"7- Padr\u00e3o","valor_produto_tamanho":"1500.00","quantidade_produto_tamanho":"200","comprimento_produto_tamanho":"16","altura_produto_tamanho":"16","largura_produto_tamanho":"16","peso_produto_tamanho":"16","promocao_valor_produto_tamanho":"0.00","parcelamento_produto_tamanho":"N\u00e3o","tem_promocao_produto_tamanho":"0"}]},{"id_produto":"2","nome_produto":"Impressora Epson 2","ativo_produto":"1","destaque_produto":"0","sob_encomenda_produto":"0","marcadagua_produto":"0","descricao_produto":"<p>Descri&ccedil;&atilde;o da impressora Epson 2</p>","informacao_produto":"<p>Informa&ccedil;&otilde;es t&eacute;cnicas da impressora Epson 2</p>","tags_produto":"","ordem":"1","acessos":"0","marca_produto":"","slug_produto":"2-impressora-epson-2","imagem_principal":"c38bf5d110a03964740266c3ee43e123.jpeg","tamanho":[{"id_produto_tamanho":"42","nome_produto_tamanho":"5-\u00danico","valor_produto_tamanho":"500.00","quantidade_produto_tamanho":"199","comprimento_produto_tamanho":"16","altura_produto_tamanho":"16","largura_produto_tamanho":"16","peso_produto_tamanho":"16","promocao_valor_produto_tamanho":"0.00","parcelamento_produto_tamanho":"Sim","tem_promocao_produto_tamanho":"0"}]}]

还有一个 JSON 总是 return 错误的例子:

[{"id_produto":"1","nome_produto":"Epson Impressora 1","ativo_produto":"1","destaque_produto":"1","sob_encomenda_produto":"1","marcadagua_produto":"0","descricao_produto":"<p>Descri&ccedil;&atilde;o da impressora Epson 1</p>","informacao_produto":"<p>Impressora a Raio Lazer</p>","tags_produto":"Impressora, Lazer, Epson","ordem":"1","acessos":"0","marca_produto":"","slug_produto":"1-epson-impressora-1","imagem_principal":"288738cdb4b99c10e877a25089d46074.jpeg","tamanho":[{"id_produto_tamanho":"43","nome_produto_tamanho":"7- Padr\u00e3o","valor_produto_tamanho":"1500.00","quantidade_produto_tamanho":"200","comprimento_produto_tamanho":"16","altura_produto_tamanho":"16","largura_produto_tamanho":"16","peso_produto_tamanho":"16","promocao_valor_produto_tamanho":"0.00","parcelamento_produto_tamanho":"N\u00e3o","tem_promocao_produto_tamanho":"0"}]},{"id_produto":"2","nome_produto":"Impressora Epson 2","ativo_produto":"1","destaque_produto":"0","sob_encomenda_produto":"0","marcadagua_produto":"0","descricao_produto":"<p>Descri&ccedil;&atilde;o da impressora Epson 2</p>","informacao_produto":"<p>Informa&ccedil;&otilde;es t&eacute;cnicas da impressora Epson 2</p>","tags_produto":"","ordem":"1","acessos":"0","marca_produto":"","slug_produto":"2-impressora-epson-2","imagem_principal":"c38bf5d110a03964740266c3ee43e123.jpeg","tamanho":[{"id_produto_tamanho":"42","nome_produto_tamanho":"5-\u00danico","valor_produto_tamanho":"500.00","quantidade_produto_tamanho":"199","comprimento_produto_tamanho":"16","altura_produto_tamanho":"16","largura_produto_tamanho":"16","peso_produto_tamanho":"16","promocao_valor_produto_tamanho":"0.00","parcelamento_produto_tamanho":"Sim","tem_promocao_produto_tamanho":"0"}]}]

Obs:我在这里使用相同的产品,但这与 returning

的产品无关

这是我用来连接 Angular 和 PHP 的工厂代码:

.factory('Conecta', ['$timeout','$q','AppService', function(time, q, Service) {
        return function(acao,api,parametro){
            var deferred = q.defer(); 
            switch(acao) {
                case 'get':
                    Service.apiGET(api,parametro).then(function(response) {      
                        if(response.status == 200){
                            deferred.resolve(response.data);
                        }else{
                            deferred.resolve(null);
                        }
                    }, function (error) {
                        console.error(error);
                    });
                    break;
                default:
                break;
            }          
            return deferred.promise;                
        };
    }])

有时问题可能在于您 return 不清楚 JSON 正如它在语法规则和浏览器预期的那样,响应的内容类型是 application/json,但是 return 一个字符串,其中包含与 JS 对象非常相似的内容。
JSONJS object

之间的差异非常粗略

JSON: {"param":"value"}
JS object: {param:"value"}

注意键名的引号。但是如果没有失败的 JSON,很难说代码中的真正问题是什么。

你所有的JSON都是正确的。
您可以执行

JSON.parse('{"kk":11}');  

在某些 js REPL(如浏览器控制台)中为每个人检查该事实。

可能的问题:

  1. 您正在尝试解析 JSON 的一部分,应该先加载所有块。
  2. 你答错了JSON,但由于某些原因无法抓住问题示例。