Пожалуйста, помогите с JQuery URL Bit.ly сократить - PullRequest
4 голосов
/ 07 мая 2011

Кто-нибудь, пожалуйста, помогите мне с этим jQuery bit.ly сокращением URL. Код выглядит следующим образом:

function shortenUrl(urlMatch)
{
    var urlMatch = urlMatch
    var username="myusername";
    var key = 'R_897b82b73568ea74fffbafa5a7b846d';
    $.ajax({
        url:"http://api.bit.ly/v3/shorten",
        data:{longUrl:urlMatch,apiKey:key,login:username},
        dataType:"jsonp",
        success:function(v)
        {
            var shortUrl=v.data.url;
            return shortUrl;
        }
    });
}

$('button').click(function(){
    var urlMatch = $(this).val();
    var newUrl = shortenUrl(urlMatch);
    $('#menu').html(newUrl);
});

и всякий раз, когда я запускаю скрипт, он возвращает этот код в консоли:

jsonp1304728172115({ data : [ ] , "status_code" : 500, "status_txt": "missing_arg_uri"})

Может кто-нибудь, пожалуйста, помогите.

Ответы [ 3 ]

2 голосов
/ 07 мая 2011

У вас есть

data:{longUrl:urlMatch,apiKey:key,login:username},

Если jsonp - это что-то похожее на json, то ваш аргумент данных сформирован неправильно:

data:"{'longUrl':" + urlMatch + ",'apiKey':" + key + ",'login':" + username + "}",

Приведенный выше код не проверен, но он должен быть похожим.

1 голос
/ 07 мая 2011

Это: urlMatch = $(this).val(); получит текст кнопки в urlMatch, это то, что вы хотите?

Кроме того, return при обратном вызове не достигнет функции, потому что ajax() является асинхроннымфункция.Чтобы сделать его синхронным, добавьте async:false к ajax() параметрам.

И return также не будут работать, поэтому вы должны присвоить результат глобальной переменной.

НоЛучше всего было бы заменить return shortUrl; на $('#menu').html(shortUrl);, так как это результат, который вы ищете.И для этого вам не нужен async:false, который заблокирует ваш код и временно заблокирует браузер.

Если все не удалось, попробуйте передать параметры в самой строке запроса.Вы можете взглянуть на это .

0 голосов
/ 05 сентября 2013

Вы пропускаете точку с запятой после "var urlMatch = urlMatch"

...