2012-09-06 132 views
0

我正在使用AJAX调用来从服务器获取HTML的应用程序。 当我在服务器上运行它时,一切正常。Jsonp跨域AJAX

但是当我在本地主机上运行时,出现了'Access-Control-Allow-Origin'错误。 我看着周围,似乎使用jsonp可能是解决方案。

所以,我的Ajax调用看起来像这样:

$.ajax({ 
    url: url, 
    dataType: 'jsonp', 
    crossDomain: true, 
    type: 'GET', 
    success: function(data){ 
     // should put the data in a div 
    }, 
    error: function(){ 
     //do some stuff with errors 
    } 
}); 

我得到的html从服务器,但我一直有这样的错误:

Uncaught SyntaxError: Unexpected token < 

有没有办法来包装JSONP响应在HTML?

谢谢!

回答

1

如果你想通过jsonp获取数据,那么服务器端需要支持jsonp。

没有办法只是更改dataType以获取数据。

如果服务器端不支持jsonp,那么你需要在你的localhost中创建一个代理。

+0

)抓住它,事实是,我得到的数据回来了..但带有“语法错误”..所以所有的代码都在客户端..但我无法使用它。 –

+0

@GuillaumeleFloch是的,你可能会返回一些含义的数据,它必须导致语法错误,请检查jsonp的工作方式。 – xdazz

+0

@GuillaumeleFloch获取语法错误的原因是JSONP利用动态连接的'

2

您不能使用JSONP来获取HTML文档。您需要将您的HTML包装到JavaScript变量中。 JSONP有一些非常具体的要求,使其能够正常工作,包括回调函数/属性。如果您不控制承载目标页面的服务器,则无法使其工作。这是一项安全措施,可防止随机页面通过AJAX呼叫从您登录的网站窃取您的个人信息。

UPDATE

我更仔细阅读你的问题。这听起来像是你的问题在于你在一个没有问题的开发环境中。 JSONP不是答案,因为为了使页面在开发过程中运行起来很麻烦。您应该创建目标HTML的本地副本,并使用相对或服务器绝对URL(例如"/the/page/i/need.html"而不是"http://myserver.com/the/page/i/need.html"

+0

不,这不是一个开发工作...我需要那个在生产中运行.. –

+0

@GuillaumeleFloch你在'localhost'上运行你的生产站点吗?你说它在服务器上工作正常。 – Pete

+0

是的,我首先在服务器上开发了应用程序。但现在,我想把它作为一个移动应用程序来封装,这就是为什么我要在本地主机上测试它。 –