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