2011-09-19 56 views
0

這是我使用的html表單。如何在jQuery中傳遞函數變量?

<label>Your Username:</label><input id="username" name="username" type="text" onchange="return ajax ('username');" /> 

這是我在php中的ajax檢查文件。

if ($_REQUEST['username']) { 

$q = $dbc -> prepare("SELECT username FROM accounts WHERE username = ?"); 
$q -> execute(array($_REQUEST['username'])); 

if (strlen($_REQUEST['username']) < 3) { 
    echo '<div class="error">Has to be at least 3 characters</div>'; 
} 

elseif ($q -> rowCount() > 0) { 
    echo '<div class="error">Username already taken</div>'; 
} 
else { 
    echo '<div class="success">Username available</div>'; 
} 
} 

而且我的jQuery Ajax請求......

function ajax (input) { 

var val = $('#'+input).val(); 
$('.loading').fadeIn().delay(100); 
$.post("ajax.php", { 
    username: val, 
}, 
function (response) { 
    $('.error, .success').hide(); 
    setTimeout(function(){ 
     $('.loading').hide(); 
      finishAjax(input, response); 
    }, 1000); 
}); 
return false; 
} 

function finishAjax(id, response) { 

$('#'+id).after(response).fadeIn(2000); 
} 

在我的形式,我打電話與變量名Ajax請求。

在我的ajax.php中,如果請求被命名爲username,則會正確驗證用戶名。

我想顯示在jQuery代碼到位用戶名的可變投入,所以我可以使用這個腳本的其他驗證和傳遞變量如電子郵件,或密碼,該腳本將仍然運行爲值輸入的將是它需要的。

如果這是有道理的。

謝謝你的時間。

回答

2
var data = {}; 
data[input] = $('#' + input).val(); 

$.post("ajax.php", data, function() {... 

finishAjax(input, response); 
+0

這似乎不起作用我完全按照你鍵入的內容,而ajax調用失敗。 – carlgcode

+0

嗯,這會發送'input'的值作爲參數名稱。不知道這是你真正想做的。 –

+0

如果您不提供更多信息,我無法爲您提供幫助。我發佈的是你在你提交的代碼中所做的修改。也許你必須調整你沒有發佈的其他東西。 –

0

你宣佈val是 「輸入」 的價值,但從來沒有使用它。用戶名的所有用法應該可以訪問該變量val,所以使用它。除非我誤解你的問題,這樣的事情(只改變了一行):

function ajax(input) { 
    var val = $('#' + input).val(); 
    $('.loading').fadeIn().delay(100); 
    $.post("ajax.php", { 
     username: val, 
    }, function (response) { 
     $('.error, .success').hide(); 
     setTimeout(function() { 
      $('.loading').hide(); 
      finishAjax('username', response); 
     }, 1000); 
    }); 
    return false; 
} 
+0

變量輸入是輸入字段的CSS ID,以便返回調用知道使用.after(響應)時顯示ajax調用的位置變量val是用戶輸入的內容(如果這很重要)? – carlgcode

0

檢查輸入ARG笏LL然後u得到繼續.....附近

{username: $('#' + input).val(),} 

as ,{ username: $('#' + input).val()}, 
刪除分號

你會得到o/p

0

在調用$ .post之前,請創建一個空對象。

var data = {}; 

使用函數的參數作爲對象的索引。

data[input] = val; 

在您的$ .post調用中使用該對象而不是匿名對象文字。

$.post("ajax.php", data, function ...); 

但是,如果您按照您所描述的方式執行操作,則需要確保您管理的所有這些參數都已正確傳入。你確定你的PHP腳本能夠處理你可能通過的所有不同的可能值嗎?

+0

就這樣我清楚了......你的目標是讓** ajax **函數接受一個字符串作爲參數,獲取具有該字符串作爲它的** id **屬性的元素的值,然後使用字符串作爲該參數的標籤將該值發送到** ajax.php **。它是否正確?換句話說,如果你寫:ajax(「name」);那麼你期望該函數能夠找到帶有** id **「name」的元素,獲取它的值並將其發送到ajax post ** ajax.php **作爲「name:value」這是正確的嗎? – natlee75

+0

是的,這是正確的,謝謝你的回答。 – carlgcode