2013-08-05 140 views
2

我试图从服务中获得JSON数据,但得到parseError当我使用$就与数据类型“JSONP”:JSON parseError - 获得JSON作为字符串

$.ajax({ 
    url: url, 
    dataType: 'JSONP' 
}) 
.error(function(XMLHttpRequest, textStatus, errorThrown) { ... }) 
.done(function(data) { ... }); 

如果我尝试它与其他数据类型比'JSONP'它返回404错误。

我怎样才能得到一个字符串,而不是解析json,我相信有一些linebreaks在json中导致解析错误。

这里是小提琴http://jsfiddle.net/FSEZQ/3/

+0

@ x4rf41我试过了......得到404错误 - 请检查小提琴 – Felix

+0

是否在您的控制器中的服务器端? –

+0

@Vinod路易斯没有,服务器端不在我的控制,只是玩这个... – Felix

回答

3

这是JSON,而不是JSONP。

例如,这是JSON:

{"key": "value"} 

这是JSONP:

callback({"key": "value"}) 

如果服务不提供JSONP,浏览器会阻止您得到它(同源安全限制)。

人们得到相同原点限制的方式包括一些服务器利用率。你可以选择正确的代码,在PHP中执行此操作,也可以使用AnyOrigin等服务。

这是一个AnyOrigin示例。

$.getJSON('http://anyorigin.com/get?url=metservice.com/publicData/tides2MonthAuckland&callback=?', function (data) { 
    $('#result1').html(JSON.stringify(data.contents)); 
}).fail(function (XMLHttpRequest, textStatus, errorThrown) { 
    $("#result2").html(textStatus); 
}); 

...和accompanying fiddle

这是一个example,它显示了如何使用这些数据。

+0

但这是一个服务器端技巧添加一个回调(?)这是定义在服务器端,但在这里@Felix是没有服务器端控制 –

+0

不需要服务器端控制。它在小提琴中工作:-) AnyOrigin将任何请求转换为JSONP请求。 jQuery将'?'变成类似'jQuery2910820198209182'的东西。 – FakeRainBrigand

+1

您使用的代理服务器类似于我认为它来自您的网址的代理服务器。它不是一个直接的请求服务器的代理服务器是响应你的内部调用作为参数 –