PreventDefault внутри обратного вызова JSONP - PullRequest
0 голосов
/ 06 января 2012

Я хотел бы использовать метод warnDefault события внутри обратного вызова jsonp.Я должен использовать чистый 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;
    }
}

Мое решение сработало, но я чувствую, что это не очень хорошая идея, сохранять событие в переменной.Кто-нибудь знает лучший способ сделать это?

Ответы [ 3 ]

2 голосов
/ 06 января 2012

Ничего против этого, но в вашем случае это кажется немного бесполезным. Поскольку вы используете асинхронный обратный вызов, preventDefault() будет вызываться после того, как было настроено поведение браузера по умолчанию. Это имеет смысл только тогда, когда вы используете его непосредственно в функции обратного вызова события.

1 голос
/ 11 января 2012
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);
    }
}());
0 голосов
/ 12 января 2012

Ну, вот как я это сделал, на случай, если кому-то понадобится какой-то день:

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);
    }
});
...