如何正确传递jquery的.ajax()函数的datastring参数?

时间:2016-05-14 05:01:59

标签: php jquery ajax

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参数的方式有问题,但我不确定如何正确地进行。

下面是我在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));

3 个答案:

答案 0 :(得分:1)

你最好的&#34; 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 =&#34; hellostring = 1&#34;;

    Array( [hellostring] => "1" )    

这意味着,在服务器端,您可以:

 $_123 = $_POST["hellostring"];  

案例 mydata = {title:&#34; some&#34; ,价值:&#34;事物&#34; };

结果,你得到:

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

所以你可以:

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

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

惊喜,这不起作用,:),你应该用这种形式包装它:

mydata = {some:[1,2,3]}

因此,您可以像上一个案例一样在服务器端继续。

注意:

为避免被黑客攻击:( PHP CASE示例)使用以下方法过滤输入:
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"
   ?>

答案 1 :(得分:0)

尝试将其作为常规javascript对象传递

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

答案 2 :(得分: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>');
    }
});