我正在制作一个需要一些用户详细信息的书签。
我了解跨域通信的最佳选择是jQuery.getJSON
或将表单和iframe附加到文档并将表单目标设置为iframe。
我决定从getJSON开始,因为它似乎不那么混乱,但似乎我有一些问题。
这是我用于json调用的内容:
$.getJSON('http://mydomain.com/bookmarklet_getjson_functions.php', function(data) {
alert(data);
});
这是php页面:
echo "{";
echo "item1: ", json_encode($item1), "\n";
echo "item2: ", json_encode($item2), "\n";
echo "item3: ", json_encode($item3), "\n";
echo "}"
当我在Firebug打开时单击bookmarklet链接时,我得到:
GET http://mydomain.com/bookmarklet_getjson_functions.php 200 OK 116ms
但警报不会发生。
有任何线索吗?
答案 0 :(得分:2)
好吧 - 在测试了其他几个例子之后发现了我做错了什么 - 问题是我没有返回jquery产生的回调 - 它被用作“密码”的一种
所以解决方案基本上是:
$.getJSON('http://mydomain.com/bookmarklet_getjson_functions.php?jsoncallback=?', function(data) {
alert(data);
});
?
中的最后一个?jsoncallback=?
会被随机函数名称自动替换,后来被用作“密码”
所以现在在我的php文件中我首先回显回调函数然后()
并在括号中我以json格式回显变量:
$toecho = array(
"firstname" => "someone",
"lastname" => "somoene's lastname"
);
//return in JSON format
echo $_GET['jsoncallback'].'('.json_encode($toecho).')';
这将回应如下:
jquery_37328327837823232_3236363({"firstname":"somsomeonee","lastname":"omoene's lastname"})
希望帮助那里的人。
答案 1 :(得分:1)
那个“php页面”有点奇怪。你可以试试这个:
header('Content-Type: text/javascript');
echo json_encode(array(
'item1' => $item1,
'item2' => $item2,
'item3' => $item3,
));
exit;
您应该为响应设置内容类型并正确编码要发送的数据。
(...使用console.log()
而不是alert()
测试响应效果更好:)