2016-09-18 6 views
1

У меня есть форма с кнопкой отправки. И я положил onclick = "foo (event, this);" в кнопке отправки для представления.Как отправить форму после успеха ajax в Safari

Я хочу отправить форму после успеха ajax.

Вот мой код:

<form id="form_a" action="destination.html"> 

    <input type="submit" id="submit_button_1" value="Submit button 1" onclick="foo(event, this);"> 

</form> 

<script type="text/javascript"> 

function foo(event, this_element) 
{ 
    event = event || window.event; 
    event_target = event.target || event.srcElement; 

    //Prevent the immediate submission because I want submit after ajax success : 
    event.preventDefault(); 

    //Retrieve the submit button clicked : 
    if(this_element.id == "submit_button_1") 
    { 
      //Submit the form afer ajax success : 

      var xhr = new XMLHttpRequest(); 

      xhr.onreadystatechange = function() 
      { 
       if(xhr.readyState == 4 && xhr.status == 200) 
       { 
        //Retrieve the form object to submit : 
        form_a = document.getElementById("form_a"); 

        //Submit the form 3000 ms later : 
        setTimeout('form_a.submit();', 3000); 
       }  
      } 

      //Send ajax request on server : 
      xhr.open("POST", "server.php", false); 
      xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
      xhr.send(""); 
    } 
} 

</script> 

Этот код не работает в сафари. Итак, как подать форму после успеха ajax в сафари?

ответ

0

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

Ваш setTimeout должен быть таким, чтобы переменная form_a получалась через closure.

setTimeout(function() { 
    form_a.submit(); 
}, 3000); 
+0

Спасибо, но это не работает на сафари. – totoaussi

+0

Я использую сафари 9.0.3, и он отлично работает. Возможно, проблема с версией ур. Поместите отладчик в 'form_a = document.getElementById (" form_a ");' и посмотрите, выполняется ли он когда-либо. – Panther

+0

Да Я использую сафари 5.1.7. Можете ли вы попробовать его на сафари 5 и подтвердить меня? – totoaussi