2015-04-16 105 views
0

我使用jsonp将一些数据从一个域推送到另一个域。我在第二台服务器上获取数据,并且该过程正常工作。但回调没有得到其他服务器上的数据后,工作properly.Even请求显示pending状态和某个请求失败,错误net::ERR_EMPTY_RESPONSEJSONP - ajax请求回调失败

$.ajax({ 
    type: 'GET', 
    url: url, 
    crossDomain: true, 
    data: data, 
    dataType: 'jsonp', 
    success: function(responseData, textStatus, jqXHR) { 
     console.log('success') 
    }, 
    error: function(xhr,status,error){ 
     console.log('error') 
    } 
}); 

当请求失败之后,我得到“错误的安慰。

更新

页眉

Request URL:http://example.com:3000/request?callback=jQuery21309164826604537666_1429167109185&firstname=sdf&lastname=sdf&_=1429167109187 
Request Headers 
Provisional headers are shown 
Accept:*/* 
Referer:http://localhost/widgets/form.html 
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36 
Query String Parameters 
view source 
view URL encoded 
callback:jQuery21309164826604537666_1429167109185 
firstname:sdf 
lastname:sdf 
phone:sdf 
email:sdf 
_:1429167109187 
+0

你确定响应是JSONP格式吗? –

+0

请访问Chrome或FF中的网址,并为我们嗅探头。 – Drakes

+0

@RoryMcCrossan你的意思是来自第二域的响应应该是jsonp格式? –

回答

0

我觉得你的问题是,随着JSONP jQuery的期待一些JSON回来。然后,您的响应主体应该像

jQuery21309164826604537666_1429167109185({}); 

在PHP中,你可以简单地返回这样一个虚拟函数:

$callback = isset($_GET["callback"]) ? $_GET["callback"] : "?"; 
header('Access-Control-Allow-Origin: *'); 
header("Content-type: application/json"); 
echo $callback . "({});"; 

对于Node.js的,你可以只使用

res.setHeader('Access-Control-Allow-Origin', '*'); 
res.setHeader("Content-Type", "application/json"); 
res.jsonp({}); 

参考:ExpressJS JSONP

+0

不工作......我在后端使用nodejs,我使用res.setHeader('Access-Control-Allow-Origin','*')设置标题; res.setHeader(“Content-Type”,“text/html”);和响应正文看起来像这样jQuery21308786661834456027_1429179942244({});但仍然会发生同样的错误。 –

+0

你不能像这样硬编码'jQuery21309164826604537666_1429167109185'。这是一个由jQuery分配的随机函数名称。另外,将内容类型设置为'application/json'。 – Drakes

+0

我没有硬代码.. \t if(req.query.hasOwnProperty('callback')){ \t var callbackParam = req.query.callback; \t res.setHeader('Access-Control-Allow-Origin','*'); \t res.setHeader(“Content-Type”,“application/json”); \t callback = callbackParam +“({});”; \t} \t console.log(callback); 这是代码 –