JSONP - ajax请求回调失败

时间:2015-04-16 06:31:42

标签: jquery node.js cross-domain jsonp

我正在使用jsonp将一些数据从一个域推送到另一个域。我在第二台服务器上获取数据,并且该过程正常。但回调无法正常工作。即使在另一台服务器上获取数据后,请求显示pending状态,但在某段时间后请求失败并显示错误net::ERR_EMPTY_RESPONSE

$.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

1 个答案:

答案 0 :(得分: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

相关问题