2016-07-18 17 views
0

私はAngularJSを使用してウェブサイトを開発しています。同様の製品を一覧表示するためにAPIで複数の選択を行っていますが、場合によっては、ランダムにJSONが返されます。SyntaxError:JSON内の予期しないトークンが位置2512にあります。私が持っているコードは:ランダムエラー「JSONの予期しないトークン」

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

上記のコードでは、関数ConectaはDB内で検索を行い、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の例時々エラーを返すことを、時々いけない:

[{"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 R$150.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の例をGERE常にエラーを返します:

[{"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"}]}] 

ここでは同じ商品を使用していますが、独立しています何の製品が

ここで私はPHPと角度CONECTするために使用私の工場コードを返して:

.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;     
     }; 
    }]) 
+0

失敗したJSONのサンプルを指定していない場合は、難しい種類です。 – Carcigenicate

+0

無効な格納値のような音がJSONを何とか壊します。その値が結果の中にある場合、失敗します。 – dandavis

+0

JSONのサンプルをブラウザで取得できます。 Open dev。 F12キーを押してツールペインを開きます。ネットワークタブを見てください。すべてのhttpクエリが一覧表示されます。ここでは、server/DBから返されるものをキャッチすることができます。各クエリには、タブの要求と応答があります。この後、JSONのある位置で予期しないトークンが何であるかを調べることができます。 –

答えて

1

時々、問題は、あなたはそれが言ったように構文規則で明確なJSONをしませ返し、期待されるものであってもよく、レスポンスのContent-typeのブラウザの原因はapplication/jsonですが、JSオブジェクトと非常によく似た文字列を返します。ここ
は非常に大まか差分JSONJSON: {"param":"value"}
JS object: {param:"value"}

注キーの名前のために引用符を

JS objectの間です。しかし、あなたのコードでJSONが失敗することなく本当の問題が何であるかを言い表すのは難しいです。

+0

JSONの例を私の質問に入れました –

+0

#Mike McCaughanによって検査されたので問題は見つかりませんでした。 JSONレスポンスの送信/処理サーバーによってチャンクされた大きなデータを渡すが、ブラウザによって熱心に解析されることがあります。あなたはあなたのハンドラを見て、ストリーミングJSONパーサーを使う必要があります。どうしたらハンドラで処理されているかを確認し、console.out(データ)を設定し、JSON.parseをコピーして成功させますか? –

+0

私はいくつかのテストを実行し、JSONに2つ以上の製品が含まれている場合、JSONに1つの製品しかない場合にエラーが発生することを正しく認識し、JSONをAPIから正しく取得できることに気付きました。私は、ブラウザがJSONなどを解釈した瞬間に問題が発生すると考えています。 –

0

すべてのJSONが正しいです。
あなたはその事実を検査する(ブラウザのコンソールのような)いくつかのjs REPLでそれらのそれぞれの

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

を行うことができます。

可能性のある問題:あなたはJSONの一部を解析することを試みているとする前に、すべてのチャンクをロードする必要があり

  1. あなたは間違ったJSONを取得しますが、何らかの理由で疑問の例を見つけられません。
+0

私はAPIからJSONを受け取ります。ちょうど私が質問に投稿したように、私はそれらを得るためにCURLを使用していますが、私はJSからPHPと "話す"ファクトリーを使用しています、そして私のコントローラーではエラーが発生します。 。私は私の質問を編集して工場を見せます –