我有一个(Laravel)PHP代码,它以这种方式返回一个长字符串:
echo json_encode([
'created' => $count,
'total' => $num_stores,
'progressValue' => round((100 / $num_stores) * $count, 2),
'token' => str_repeat('|',1024*64)
]);
我需要在javascript中获取此字符串并清除它,删除所有" |"字符。但似乎没有用。
这是我的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时,我总是得到异常,在控制台中我仍然看到" |" " cleaningResponse"中的字符变量
如果我更换它们怎么可能?
答案 0 :(得分:0)
当xhr.readyState == 3
,xhr.responseText
只保留部分数据时 - 3意味着响应尚未完全下载。您可能只尝试解析部分不完整的JSON字符串,因此无效且可解析。等待下载完整响应(xhr.readyState == 4
),然后尝试清理并解析JSON。
有关XHR状态的进一步说明,请参阅https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState。