如何在javascript中进行跨域jsonp请求

如何在javascript中进行跨域jsonp请求,javascript,html,json,cross-domain,jsonp,Javascript,Html,Json,Cross Domain,Jsonp,我正在编写一个小的代码示例,但在做我想做的事情时遇到了一些问题 下面是一个代码示例。我在网上找到了它的一部分,并试图使用它 在上面的例子中,它工作得很好,但是当目标URL不相同时,它就不发送了 在第一个示例中,目标提供json。 在第二个示例中,目标提供jsonp 区别在于,对于第二个示例,我将json设置为“true”值。 我真的不明白为什么它不起作用 如果有人能向我解释原因,我尝试了很多在互联网上找到的东西,但都没有真正起作用 非常感谢那些花时间解决我的问题并帮助我找出问题所在的人;) 样本

我正在编写一个小的代码示例,但在做我想做的事情时遇到了一些问题

下面是一个代码示例。我在网上找到了它的一部分,并试图使用它

在上面的例子中,它工作得很好,但是当目标URL不相同时,它就不发送了

在第一个示例中,目标提供json。 在第二个示例中,目标提供jsonp

区别在于,对于第二个示例,我将json设置为“true”值。 我真的不明白为什么它不起作用

如果有人能向我解释原因,我尝试了很多在互联网上找到的东西,但都没有真正起作用

非常感谢那些花时间解决我的问题并帮助我找出问题所在的人;)

样本1:

<!doctype html>
<html>
<head>
<title>JSONP example</title>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
</head>
<body>
<h1>Test</h1>
<script>
$.ajax({
type: 'GET',
dataType: "json",
processData: false,
crossDomain: true,
jsonp: false,
url: "http://flxn.eu/json.php",
success: function (responseData, textStatus, jqXHR) 
{
    console.debug(responseData);
    $.each(responseData, function (index, value) {
            console.debug(value);
            $('body').append(value.name + '<br />' + value.address + '<br />' + value.city + '<br />' + value.postcode + '<br />' + '<br />');
        });
},
error: function (responseData, textStatus, errorThrown) {
    alert('POST failed.');
}
});
</script>
</body>
</html>

JSONP示例
试验
$.ajax({
键入:“GET”,
数据类型:“json”,
processData:false,
跨域:是的,
jsonp:false,
url:“http://flxn.eu/json.php",
成功:函数(responseData、textStatus、jqXHR)
{
console.debug(responseData);
$.each(响应数据、函数(索引、值){
console.debug(值);
$('body').append(value.name+'
'+value.address+'
'+value.city+'
'+value.postcode+'
'
'); }); }, 错误:函数(响应数据、文本状态、错误抛出){ 警报(“POST失败”); } });
样本2:

<!doctype html>
<html>
<head>
<title>JSONP example</title>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
</head>
<body>
<h1>test jsonP</h1>
<script>
$.ajax({
type: 'GET',
dataType: "json",
processData: false,
crossDomain: true,
jsonp: true,
url: "http://widget.mondialrelay.com//parcelshop-picker/v3_0/services/parcelshop-picker.svc/SearchPR?Brand=BDTEST%20%20&Country=FR&PostCode=62620&ColLivMod=24R&Weight=&NbResults=7&SearchDelay=&SearchFar=75&=Zone_Widget&VacationBefore=&VacationAfter=&Service=&Latitude=&Longitude=&method=jQuery16206304910685867071_1380876031038&_=1380879686732",
success: function (responseData, textStatus, jqXHR) 
{
    console.debug(responseData);
},
error: function (responseData, textStatus, errorThrown) {
    alert('POST failed.');
}
});
</script>
</body>
</html>

JSONP示例
测试jsonP
$.ajax({
键入:“GET”,
数据类型:“json”,
processData:false,
跨域:是的,
jsonp:没错,
url:“http://widget.mondialrelay.com//parcelshop-picker/v3_0/services/parcelshop-picker.svc/SearchPR?Brand=BDTEST%20%20&Country=FR&PostCode=62620&ColLivMod=24R&Weight=&NbResults=7&SearchDelay=&SearchFar=75&=Zone_Widget&VacationBefore=&VacationAfter=&Service=&Latitude=&Longitude=&method=jQuery16206304910685867071_1380876031038&_=1380879686732",
成功:函数(responseData、textStatus、jqXHR)
{
console.debug(responseData);
},
错误:函数(响应数据、文本状态、错误抛出){
警报(“POST失败”);
}
});

您需要告诉jQuery将JSONP回调名称放在哪里


将URL参数更改为
&method=?

这里是一个jsonp跨域的工作示例

这就是你要找的吗

如果您已使用查询字符串请求

 ?callback=my_callback_method
然后,您的服务器必须以如下方式包装响应数据:

my_callback_method({your json serialized data});
见:

如果您的json很好,希望这能起作用

<!doctype html>
<html>
<head>
<title>JSONP example</title>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
</head>
<body>
<h1>test jsonP</h1>
<script>
var url = 'http://widget.mondialrelay.com//parcelshop-picker/v3_0/services/parcelshop-picker.svc/SearchPR?Brand=BDTEST%20%20&Country=FR&PostCode=62620&ColLivMod=24R&Weight=&NbResults=7&SearchDelay=&SearchFar=75&=Zone_Widget&VacationBefore=&VacationAfter=&Service=&Latitude=&Longitude=&method=jQuery16206304910685867071_1380876031038&_=1380879686732?callback=?';
$.ajax({
   type: 'GET',
    url: url,
    async: false,
    jsonpCallback: 'jQuery16206304910685867071_1380876031038',
    contentType: "application/json",
    dataType: 'jsonp',
    success: function(json) {
       console.dir(json.PRList);
    },
    error: function(e) {
       console.log(e.message);
    }
});
</script>
</body>
</html>

JSONP示例
测试jsonP
变量url='http://widget.mondialrelay.com//parcelshop-picker/v3_0/services/parcelshop-picker.svc/SearchPR?Brand=BDTEST%20%20&Country=FR&PostCode=62620&ColLivMod=24R&Weight=&NbResults=7&SearchDelay=&SearchFar=75&=Zone_Widget&VacationBefore=&VacationAfter=&Service=&Latitude=&Longitude=&method=jQuery16206304910685867071_1380876031038&_=1380879686732?callback=?';
$.ajax({
键入:“GET”,
url:url,
async:false,
jsonpCallback:'jQuery16206304910685867071_1380876031038',
contentType:“应用程序/json”,
数据类型:“jsonp”,
成功:函数(json){
console.dir(json.PRList);
},
错误:函数(e){
控制台日志(e.message);
}
});

这是一个jsonp跨域的工作示例,请参见:在该URL中有什么
jQuery162063…
do?@Bergi:这是来自其他人的jsonp请求的实际回调名称。是的,完全正确。但是当我试图通过放置URL来调整它时,它不起作用。我想是的,但当我放置我的URL而不是之前的URL时,我在Chrome的控制台中得到了“未捕获的引用错误:jQuery16206304910685867071_13808767630138未定义”我在回答中添加了以下信息:。我阅读了您的解释并理解了,但我看不出代码中的真正变化。。我的意思是,如果我使用回调进行请求,服务器将使用包装json的回调进行响应,但我不知道需要做哪些更改才能使其正常工作。。谢谢你的回答使用这个url:url:“?”,然后看看chrome中的控制台,看到json响应中出现的新错误。现在我得到了这个:“Uncaught SyntaxError:Unexpected token?”