2016-05-14 38 views
0
var username = $('#username').val(); 

var dataString = 'username=' + username; 

    $.ajax({ 
     type: "POST", 
     url: "signinout.php", 
     data: dataString, 
     success: function() { 
      $('.user').html('<span>Welcome <span id="loggedUser">' + username + '</span>!</span> <a id="signOut" onclick="window.location.reload()">SIGN OUT</a>'); 
     } 
    }); 

使用上面的代碼,我的用戶名變量沒有正確傳遞,我假設我編寫datastring參數的方式有問題,但我不知道如何正確地執行它。如何正確傳遞jquery的.ajax()函數的datastring參數?

下面是我在signinout.php中使用的php代碼將用戶名插入到數據庫中,用戶名字段不會與每個新條目一起輸入到數據庫中。

$username = protect($_POST['username']); 
$time = time(); 

$sql = "INSERT INTO users 
    (username, join_date) 
     VALUES 
    ('$username', '$time')"; 
$result = mysqli_query($cn, $sql) or 
    die(mysqli_error($cn)); 
+0

VAR dataString = '用戶名=' +用戶名;將此行替換爲var dataString = {'username':username}; – GrvTyagi

+0

data:dataString,用數據替換:{'username':username}, – Poria

回答

1

你的 「最佳」 datastring依賴於服務器端的部分您的需求。作爲一個例子,這個jQuery的Ajax調用發送對象到服務器端操作(PHP):

var mydata = null; 

mydata = "hellostring=1"; 
mydata = { title: "some" , value: "thing" }; 
mydata = [1,2,3]; 

$.ajax({ 
    cache: false, type: 'post', async: true, 
    data: mydata, 
    url: 'some-script.php', 
    success: function(resp){ 
     console.log("OK",resp); 
    }, 
    error: function(e){ 
     console.log(e.responseText); 
    } 
}); 

至於結果,在發球方面,你可能有這樣的腳本,它會返回相同的發送:

// some-script.php 
<?php 
    echo print_r($_POST,true); 
?> 

的輸出,對於每個類型的數據(見MYDATA變量)是:

案例:MYDATA = 「hellostring = 1」;

Array([hellostring] => "1")  

這意味着,在服務器端,您可以:

$_123 = $_POST["hellostring"]; 

案例 MYDATA = {標題: 「一些」,值: 「東西」};

至於結果,你會得到:

Array 
(
    [title] => some 
    [value] => thing 
) 

,因此您可以:

$title = $_POST['title']; $value = $_POST['value']; 

案例 MYDATA = [1,2,3];

驚訝的是,這並不工作,:),你應該把它包起來,以這種形式:

MYDATA = {一些:[1,2,3]}

所以,你可以在你的前進服務器端與前一種情況相同。

注:

爲了避免遭受過黑客攻擊:(PHP案例)使用篩選輸入:
http://php.net/manual/es/function.filter-input.php

爲了有一個更先進的數據處理在您的服務器端部分(即:在接收ajax請求的腳本中),您可以通過以下方式使用json:

讓通過假設你是通過JavaScript發送對象開始:

// in your client part, 
    mydata = { title: "some" , value: "thing", mydog: "sammy" }; 
    ..do your ajax call stuff here.. 

而且,在你的服務器端:

<?php 
     // some-script.php 
     $obj = json_decode(file_get_contents('php://input')); 
     echo $obj->title; // output: "some" 
     echo $obj->value; // output: "thing" 
     echo $obj->mydog; // output: "sammy" 
    ?> 
+0

你應該得到這樣一個詳細的答案upvote。你太好了 – mkoryak

0

嘗試把它當作一個普通的JavaScript對象

var dataObj = {'username': username}; 
$.ajax({ 
    type: "POST", 
    url: "signinout.php", 
    data: dataObj, 
+0

我該怎麼做?我的JavaScript不是那麼好 –

+0

已更新的東西 – mkoryak

+0

代碼似乎並沒有使其工作,是否有可能是我的代碼的另一部分是錯誤的? –

0

嘗試使用data: "username="+username,代替

var username = $('#username').val(); 

$.ajax({ 
    type: "POST", 
    url: "signinout.php", 
    data: "username=" + username, 
    success: function() { 
     $('.user').html('<span>Welcome <span id="loggedUser">' + username + '</span>!</span> <a id="signOut" onclick="window.location.reload()">SIGN OUT</a>'); 
    } 
});