我想在jsonp的回调中使用事件的preventDefault方法。我必须使用纯JavaScript。我已经有一个模拟jsonp请求的函数。这是我正在做的事情:
var evt_temp = null;
function onContextMenu(event)
{
evt_temp = event;
jsonp
({
url: "someurl",
params: "someparams",
callback: "cb"
});
}
function cb(response)
{
if (something == true)
{
evt_temp.preventDefault();
evt_temp = null;
}
}
我的解决方案有效,但我觉得这不是一个好主意,将事件存储在var上。有人知道更好的方法吗?
答案 0 :(得分:2)
它没有反对它,但在你的情况下它似乎有点无用。当您使用异步回调时,将在默认浏览器行为发生后调用preventDefault()
。只有在事件的回调函数中直接使用它才有意义。
答案 1 :(得分:1)
function onContextMenu(event) {
evt_temp = event;
good_jsonp({
url: "someurl",
params: "someparams",
callback: function (response) {
if (something === true) {
event.preventDefault();
}
}
});
}
var good_jsonp = (function () {
var uuid = 0;
return good_jsonp;
function good_jsonp(obj) {
var id = "good_jsonp" + ++uuid;
window[id] = obj.callback;
obj.callback = id;
jsonp(obj);
}
}());
答案 2 :(得分:0)
嗯,这就是我如何制作它,如果有人需要某一天:
var MyAPI =
{
jsonp: function(args)
{
var script = document.createElement("script");
var url = args.url + "?";
var generatedFunction = "jsonpCallback" + Math.round(Math.random() * 1000001);
window[generatedFunction] = function(response)
{
args.callback(eval("(" + response + ")"));
delete window[generatedFunction];
document.body.removeChild(document.getElementById(generatedFunction));
};
if (args.params)
{
url += "_r={";
for (var prop in args.params)
{
url += "\"" + prop + "\":\"" + args.params[prop] + "\",";
}
url = url.substr(0, url.length - 1);
url += "}&"
}
url += "_cb=" + generatedFunction;
script.src = url;
script.type = "text/javascript";
script.id = generatedFunction;
document.body.appendChild(script);
}
};
致电:
MyAPI.jsonp
({
url: "someurl",
params: { param1: "param1", param2: "param2" },
callback: function(response)
{
alert(response);
}
});