0

我正在制作一个需要一些用户详细信息的书签。

我了解跨域通信的最佳选择是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 时单击书签链接时,我得到:

GET http://mydomain.com/bookmarklet_getjson_functions.php 200 OK 116ms

但警报不会发生。

有什么线索吗?

4

2 回答 2

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"})

希望能帮助那里的人。

于 2012-12-26T21:00:34.453 回答
1

那个“php页面”有点奇怪。你可以试试这个:

header('Content-Type: text/javascript');
echo json_encode(array(
    'item1' => $item1,
    'item2' => $item2,
    'item3' => $item3,
));
exit;

您应该设置响应的内容类型并正确编码要发送的数据。(...测试响应会console.log()更好alert():)

于 2012-12-26T20:57:56.303 回答