2017-07-04 8 views
1

から返された私は、このように長い文字列を返す(Laravel)PHPコード持っている:私はJavaScriptでこの文字列を取得し、それをきれいにする必要がは、XMLHttpRequestのリクエスト

echo json_encode([ 
    'created' => $count, 
    'total' => $num_stores, 
    'progressValue' => round((100/$num_stores) * $count, 2), 
    'token' => str_repeat('|',1024*64) 
]); 

を、すべての "|"キャラクター。しかし、それは動作していないようです。

これは私のjavascriptのコードです:

var xhr = new XMLHttpRequest(); 
xhr.onreadystatechange = function() { 
    try { 
     if (xhr.readyState == 4) { 
      alert('[XHR] Done'); 
     } else if (xhr.readyState > 2) { 
      var new_response = xhr.responseText.substring(xhr.previous_text.length); 
      var cleanedResponse = new_response.replace(/[|]/g, ''); 

      console.log('CLEANED RESPONSE: ' + cleanedResponse); 
      var result = JSON.parse(cleanedResponse); 
      console.log('AFTER THE PARSE'); 

      xhr.previous_text = xhr.responseText; 
     } 
    } catch (e) { 
     console.log(xhr.responseText); 
     alert("[XHR STATECHANGE] Exception: " + e); 
    } 
}; 
xhr.open("POST", "...", true); 
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
xhr.setRequestHeader("X-CSRF-TOKEN", jQuery('meta[name="csrf-token"]').attr('content')); 
xhr.send(params); 

私はJSONを解析しようとしたとき、私は常に例外を取得し、コンソールに、私はまだ見「|」 "cleanedResponse"変数の文字

どのように私はそれらを交換する場合、それは可能ですか?

答えて

0

xhr.responseTextが部分データのみを保持する場合 - 3は応答がまだ完全にダウンロードされていないことを意味します。あなたは、おそらく完全なので、有効ではありませんし、解析可能ではありません一部のみのJSON文字列を解析してみてください。完全寛解(xhr.readyState == 4)をダウンロードするために待ってからJSONをきれいにし、解析してみてください。

XHR状態の詳細については、https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyStateを参照してください。

+0

私は、部分的なデータを解析する必要があり、私はプログレスバーを実装する必要があります。私が状態== 4にあるとき、プロセスは終了します。 –

+0

は確かに、あなたはそれを行うことができます。状態> 2で進行状況バーを変更しますが、文字列が完全にロードされるまでは 'JSON.parse'を実行しないでください。状態は== 4です。 –

+0

また、XHRにはデータがダウンロードされると起動する特別なイベントがありますどのくらいの量がロードされ、残りの量がどれだけ残っているかを示す数値が表示されます。これは特にあなたのような状況のためのものです。 responseTextの長さを測定する必要はありません。詳細については、https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Monitoring_progressを参照してください。 –

関連する問題