使用JSONP请求无效的JSON文件

时间:2012-03-11 12:20:54

标签: javascript jquery json jsonp

我正在请求结构无效的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> 

3 个答案:

答案 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。