我如何通过 php 附加 jsonp 数组返回
Posted
技术标签:
【中文标题】我如何通过 php 附加 jsonp 数组返回【英文标题】:How I can append jsonp array return by php 【发布时间】:2012-08-17 17:10:53 【问题描述】:我在访问由 php 脚本返回的 JSONP 数组时遇到问题,我正在处理跨域请求。 我的代码是:
$('input#searchlocation').click(function ()
$.ajax(
url: 'http://mydomain/searchlocation.php',
type: 'get',
dataType: 'jsonp',
data: $('form#searchlocfrm').serialize(),
processData: false,
crossDomain: true,
contentType: "application/json",
success: function (data)
$("#searchlocation_result").html("");
$.each(data.items, function (i, locdata)
console.log(locdata);
);
);
);
PHP:返回数组:
echo $_GET["callback"] . "(" . json_encode($res) . ")";
请帮助我如何将返回响应打印到我的页面中。 非常感谢。
【问题讨论】:
试试echo json_encode($res);
success
不适用于dataType : jsonp
@ValentinRusk 这是 jsonp,不是 json。
嗨 diEcho,我对 web 服务的调用会将响应返回到 json 数组中,所以请指导我如何通过跨域调用获取返回数组。
内容类型应为:“application/javascript”
【参考方案1】:
您需要将?callback=?
附加到您的网址,并使用.getJSON
$('input#searchlocation').click(function ()
$.getJSON('http://mydomain/searchlocation.php?callback=?', $('form#searchlocfrm').serialize(), function (data)
$("#searchlocation_result").html("");
$.each(data.items, function (i, locdata)
console.log(locdata);
);
);
);
【讨论】:
非常感谢您的快速帮助【参考方案2】:$('input#searchlocation').click(function ()
$.ajax(
url: 'http://mydomain/searchlocation.php',
type: 'get',
dataType: 'jsonp',
data: $('form#searchlocfrm').serialize() + "callback=returnData",
processData: false,
crossDomain: true,
contentType: "application/json"
);
);
function returnData(data)
$("#searchlocation_result").html("");
$.each(data.items, function (i, locdata)
console.log(locdata);
);
这应该是因为 jsonp 的想法是你有一个回调函数,而在 ajax 中没有成功,因为它是 jsonp
【讨论】:
【参考方案3】:这就够了:
$.ajax(
url: 'http://mydomain/searchlocation.php',
dataType: 'jsonp',
data: $('form#searchlocfrm').serialize(),
success: function (data)
// ...
);
同样在服务器端:
header('Content-type: application/javascript');
echo $_GET["callback"] . "(" . json_encode($res) . ")";
【讨论】:
以上是关于我如何通过 php 附加 jsonp 数组返回的主要内容,如果未能解决你的问题,请参考以下文章