我在服务器上需要做什么特别的事情才能在书签上运行jQuery.getJSON?

时间:2012-12-26 19:47:03

标签: php javascript jquery getjson

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

我了解跨域通信的最佳选择是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

但警报不会发生。

有任何线索吗?

2 个答案:

答案 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()测试响应效果更好:)