2013-05-08 182 views
0

我有以下的AJAX腳本,但由於某些原因,VAR確定它不返回true或false,這樣的形式可以繼續:AJAX:在返回true或false的成功:「

function ajax_call(email,title,url){ 
    var email = document.getElementById("email").value; 
    var title = document.getElementById("title").value; 
    var url = document.getElementById("url").value; 
    var parametros = {"emaail":email, "tiitle":title, "uurl":url}; 
    var ok = true; 
    $.ajax({ 
     data: parametros, 
     url: 'validate.php', 
     type: 'post', 
     error: function() { 
      alert("An error has occurred! Try Again!"); 
     }, 
     success: function (response) { 

      if(response == 'bien') { ok = true; } else { $("#ajax_cal").html(response); ok = false; } 

     } 
    }); 

return ok; 
} 

HTML:

<form onsubmit="return ajax_call();"> 
... 
</form> 

PHP:

<?php 
//////.... 
    if(!empty($errors)) { 
     foreach($errors as $error) { 
      echo '<li>'.$error.'</li>'; 
     } 
    } else { echo 'bien'; } 

?> 

一切工作不錯,除了返回值。 在此先感謝。

+0

如果它不返回true或false,什麼是它返回? – andrewsi 2013-05-08 19:07:23

+0

另外,'response'返回什麼?它會返回「bien」嗎? – webnoob 2013-05-08 19:08:00

+4

AJAX是異步的,它總是會返回true,因爲它不會等待響應可能更改值。 – 2013-05-08 19:08:13

回答

4

防止完全提交,發送ajax請求,然後如果是好的,請提交表單。

HTML:

<form id="myform"> 
... 
</form> 

的JavaScript:

$("#myform").submit(function(e){ 
    // prevent submit 
    e.preventDefault(); 

    var email = document.getElementById("email").value; 
    var title = document.getElementById("title").value; 
    var url = document.getElementById("url").value; 
    var parametros = {"emaail":email, "tiitle":title, "uurl":url}; 
    $.ajax({ 
     data: parametros, 
     url: 'validate.php', 
     type: 'post', 
     context: this, 
     error: function() { 
      alert("An error has occurred! Try Again!"); 
     }, 
     success: function (response) { 

      if($.trim(response) == 'bien') { 
       this.submit(); // submit, bypassing jquery bound event 
      } 
      else { 
       $("#ajax_call").html(response); 
      } 

     } 
    }); 

}); 
+0

看起來很有希望,但它沒有工作:( – 2013-05-08 19:30:33

+0

它給你什麼錯誤或什麼不工作?這是一個非常簡單的方法來做到這一點,如果出現問題,這很可能是由於ajax請求或此代碼的外部原因 – 2013-05-08 19:32:32

+0

我知道它應該工作,因爲響應將返回'bien'(好)或將打印錯誤,它們僅用於選項,不知道爲什麼不工作:( – 2013-05-08 19:53:01

1

您在函數結束時返回ok。這是返回之前您的ajax請求發送並完成。

你不能依靠你的函數的返回值,你應該做你裏面的「成功」的一部分東西。這主要取決於你想用你的返回值

+0

但是我能做什麼,如果我只是在我的PHP上使用1個回聲...這是一個驗證表單,如果數組有錯誤,它會回顯錯誤,否則它會回顯'bien';所以這就是響應'雙'的地方,它會返回true。 – 2013-05-08 19:14:46

0

做什麼,我一個完整的新手到的jQuery但在一些我一直對我的腳本已經不得不前綴「響應」你有。

例如...

if(response.tiitle == 'bien') { ok = true; } else { $("#ajax_cal").html(response); ok = false; } 

也知道你有雙重封在你的「parametros」,但我敢肯定這是蓄意(即tiitle而不是名稱等)。

+0

這可能是這種情況,但這不是他的劇本未能做到他想做的事情的原因。見periklis的答案。 – sgroves 2013-05-08 19:13:02

+0

謝謝Jhon,這是故意留下的,所以我可以在PHP中接收這些值。問題是得到返回值 – 2013-05-08 19:17:37