2011-03-24 174 views
2

我已經定義了一個文件availability.php,返回「是」或「否」,以及我有一個表單,必須在訂閱用戶之前檢查表單的可用性,並且我使用這個ajax函數,但比較行似乎不起作用?JQuery Ajax函數返回

 availability: function(element, value) { 
      $.ajax({ 
      type: "GET", 
      url: "/tunnel/availability.php", 
      data: "username="+element, 
      dataType: "html", 
      success: function(data){ 
       $("#response").html(data); 
       var $response = data; 
       if ($response == "yes") 
       alert("found"); 
      } 
      }); 
     } 

回答

0

試試這個:

availability: function(element, value) { 
    $.ajax({ 
    type: "GET", 
    url: "/tunnel/availability.php", 
    data: "username="+element, 
    success: function(data){ 
     if (data == "yes"){ 
     alert("found"); 
     } 
    } 
    }); 
} 
+0

它沒有工作?我可以使用find或filter之類的函數嗎? – 2011-03-24 23:44:33

0

爲什麼你認爲它不工作?如果您希望函數在提交表單之前檢查並返回值,則在執行ajax檢查之前,availability函數可能會返回,從而允許您的表單提交併取消警報 - 即頁面已經被卸載並且正在處理新的請求。如果你想提交表單之前用這個來查詢你需要:

  1. 返回從availability假的(或以其他方式阻止表單提交)
  2. 不要從availability成功函數的形式提交。
  3. (也許)表明你期待一個文本響應而不是html。

您還可以簡化檢查 - 在檢查之前,無需將「數據」放入變量中。我也不確定爲什麼要將它添加到頁面,但這可能是合理的。我還建議函數的名稱更改(如果您修改它來完成此操作)並通過AJAX處理表單提交 - 如果不提​​供,則可以刪除處理程序並簡單地觸發表單上的提交。

submitIfAvailable: function(form, element, value) { 
    $.ajax({ 
    type: "GET", 
    url: "/tunnel/availability.php", 
    data: "username="+element, 
    dataType: 'text', // I think it should work without this, but... 
    success: function(data){ 
     if (data == "yes"){ 
     $form = $(form); 
     $.post($form.attr('action'), $form.serialize(), function(result) { 
      // process the result of form submission 
     }); 
     } 
    } 
    }); 
    return false; 
} 

我正在做一些假設 - 如果這不適合如何使用availability函數適當修改。關鍵要記住的是,該功能將在之前返回AJAX調用完成,並且不能使用來自AJAX調用的函數的任何返回值。至少,如果您不強制AJAX調用通過將選項aSync設置爲false來同步運行,那麼這是真實的。

0

您需要確認可用性頁面實際返回的內容。 使用Firebug(或您最喜歡的JS調試器)調試回調,查看返回的對象類型爲data。您可能會發現您的退貨價值被包裹,例如您可能需要檢查data.value或類似的東西。