jquery $.ajax jsonp

16
$.ajax({
    type : "GET",
    dataType : "jsonp",
    url : '/',
    data : {}
    success: function(obj){

    }
});

我该如何使用$.ajax dataType: jsonp跨域传输数据?


1
由于您没有说明遇到了什么错误,我可以向您指出这个链接:http://api.jquery.com/jQuery.getJSON/,它应该可以实现您想要的功能 - 但是再次提醒,它只是您已经编写的简写形式。 - m90
发布数据?你能澄清一下吗? - Baz1nga
请查看文档:http://api.jquery.com/jQuery.getJSON/ 您需要在您的URL中指定一个回调函数。 - Richard H
他想要跨域发布POST请求。 - genesis
IE8使用XDomainRequest但用户可能是IE6 - Thinking80s
2个回答

38
回答你的问题,而不是像上面那样发送给你另一个链接: JS:
$.ajax({
     type : "GET",
     dataType : "jsonp",
     url : "http://domainname.com/json.php?callback=?", // ?callback=?
     success: function(data){
           // do stuff with data
     }
});

PHP可能看起来像这样:

<?php
include('connect.php');
$sql = "SELECT id, name, items FROM tablename ORDER BY id ASC"; 
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
{
    $rows[] = array(
            "id" => $row['id'], 
            "name" => $row['name'], 
            "items" => $row['items']);
}
$json = json_encode($rows);
$callback = $_GET['callback'];
echo $callback.'('. $json . ')';
?>
dataType设置为jsonp将允许jQuery自动在您的url末尾添加额外的?callback=?以指定回调函数。如果您像上面那样指定了自己的回调函数名称,它将使用您传递的callback名称。如果您需要指定一个JSON回调函数名称,请使用jsonpCallback属性,或将其添加为数据属性的参数。如需更多信息,请访问jQuery API Ajax:http://api.jquery.com/jQuery.ajax/
不要忘记在结果字符串上添加;
希望这可以帮助您!

3
非常感谢!在查看了数十个示例之后,这个终于让我的代码运行起来了! - sahithya

3

只用简单的jsonp无法实现,可以阅读这篇文章了解相关内容。


2
不确定这有什么帮助?它并没有提供解决方案,只是说你不能这样做。 - dewd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接