在bookmarklet中的Ajax请求

时间:2012-02-24 20:09:52

标签: ajax jquery bookmarklet

我想构建一个bookmarklet,允许我将当前页面的URL发送到php文件,获取确认响应并将其显示给用户。

我尝试了几件事,只有一种方法有效,它成功发送了请求,但没有显示响应。

javascript: (function (e, a, g, h, f, c, b, d) {
    if (!(f = e.jQuery) || g > f.fn.jquery || h(f)) {
        c = a.createElement("script");
        c.type = "text/javascript";
        c.src = "http://ajax.googleapis.com/ajax/libs/jquery/" + g + "/jquery.min.js";
        c.onload = c.onreadystatechange = function () {
            if (!b && (!(d = this.readyState) || d == "loaded" || d == "complete")) {
                h((f = e.jQuery).noConflict(1), b = 1);
                f(c).remove()
            }
        };
        a.documentElement.childNodes[0].appendChild(c)
    }
})(window, document, "1.3.2", function ($, L) {
    $.get("http://mysite.com/recommend.php", {
        url: encodeURIComponent(document.URL)
    }, function (data) {
        if (data.error) {
            alert('Looks like someone else added this site just before you did, Thank you though!');
        } else {
            alert(document.URL + ' successfully added!');
        }
    }, 'json');
});

无论如何我能让这个工作吗?我在某处了解了原始策略 - 是否有其他方法可以实现我想要做的事情 - 目标是构建一个书签,与服务器通信并显示响应。

1 个答案:

答案 0 :(得分:4)

您不能使用标准的Ajax跨域。浏览器强制执行“相同域”策略。您必须使用JSONP。 http://en.wikipedia.org/wiki/JSONP

在此页面搜索“jsonp”以开始使用jQuery与jSONP:http://api.jquery.com/jQuery.ajax/

更简单的解决方案可能就是这样:

var recURL='http://mysite/com/recommend.php?url=' 
  + encodeURIComponent(document.URL);
document.body.appendChild(document.createElement('script')).src=recURL;

recommended.php应返回类似:alert(document.URL + ' successfully added!');

的Javascript代码