我正在请求结构无效的JSON文件:
{}&&{
"result": {
"data": "01",
"id": "02"
}
}
我无法更改JSON。它在外部服务器上。 Firebug返回指向&&的语法错误。字符。
我该怎么做才能获得这个无效的JSON?
我的剧本:
<script src="jquery.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$.ajax({
url:"http://different-domain.com",
dataType: 'JSONP',
success: parseJSON
function parseJSON(data){
// do stuff with json
}
});
</script>
答案 0 :(得分:2)
{}&&
前缀是精确设计的箔条,以便停止在不同域名之外的任何人访问数据。有关背景信息,请参阅this question。
如果您需要外部接口,以便可以在同源策略之外进行交互,则必须让different-domain.com更改其脚本,以便它支持JSONP回调接口。
答案 1 :(得分:1)
您可以使用complete
而不是success
。在错误发生之前,你可以获得RAW响应。然后你可以在无法解析JSON的情况下使用无效的字符:
$.ajax({
url:"http://different-domain.com",
dataType: 'JSONP',
complete: function(xhr){
var raw= xhr.responseText
, json
, err
;
while(raw.length && err)
{
// rewind state
err= false;
try {
//parse JSON
json= parseJSON(raw);
}
catch (e)
{
// Mark loop as invalid
err= true;
}
// Get out if json is valid and parsed
if (!err) break;
// If loop is not broken try another one time: cut one char from invalid json and go on.
raw= raw.substr(1);
}
if (!err)
{
console.log('YAPPPEEEEE :)');
}
else
{
console.log('NOPE :(');
}
}
答案 2 :(得分:0)
您希望删除&&
以及之前发生的任何内容。假设始终如此,请在success
方法的$.ajax()
处理程序中执行以下操作:
succes: function(data){
var goodJSON = data.slice(4);
var myObject = $.parseJSON(goodJSON);
}
myObject
现在将保留完全解析的JSON。