2012-05-30 2 views
1

В настоящее время у меня есть этот код, чтобы предотвратить обычную отправку формы и вместо этого получить желаемый результат из API. Тем не менее, я пытаюсь установить эти данные как переменную, поэтому щелчок на кнопке может перенаправлять туда (выходные данные - это URL-адрес). У меня есть следующий код, но он не работает. Есть предположения?Передача данных формы jQuery в переменную js

var tourl; 
$("form#surlform").submit(function(){ 
     var url = $("input#url").val(); 
     $.get("api/create.php?url=" + url, function(data) { 
       $("input#url").val(data); 
       $("input#url").select(); 
       $('#button').hide(); 
       $('#hbutton').show(); 
       var tourl = data; 
      }); 

     return false; 
    }); 
    }); 
$('#hbutton').bind('click', function() { 
     window.location = tourl; 
    }); 

ответ

2

Вы должны переместить bind вызова внутри обработчика событий успеха:

$.get("api/create.php?url=" + url, function(data) { 
    $("input#url").val(data); 
    $("input#url").select(); 
    $('#button').hide(); 
    $('#hbutton').show(); 
    var tourl = data; 
    $('#hbutton').bind('click', function() { 
     window.location = tourl; 
    }); 
}); 

Во-первых, tourl в области видимости обработчика событий успеха. Он не будет доступен вне этой функции.

Во-вторых, поскольку вы делаете запрос AJAX, tourl будет undefined, пока этот запрос не ответит. Единственный способ убедиться, что tourl присвоено его значение, - это подождать, пока обратный вызов не сделает все, что от него зависит.

Как отмечено в комментариях, это свяжет несколько обработчиков событий с вашей кнопкой, если запрос AJAX выполняется несколько раз. Чтобы обойти это, вы можете отвязать обработчик событий до привязки нового.

+0

+1 Ему может понадобиться 'unbind()' first, если выполняется несколько запросов. –

+0

@ James-allardice, который отлично работал, спасибо! Последнее: как добавить некоторый текст в конец переменной. Я попробовал var. "2", но безрезультатно. –

+1

Без проблем, рад, что я мог бы помочь :) Вы можете связать строки с помощью оператора '+': var tourl = data + 2; ' –

1

Вы определяете новую переменную в закрытом пространстве. Изменение

var tourl = data; 

в

tourl = data; 

Затем он будет назначен к глобальной переменной.

Смежные вопросы