Ajax从JS到PHP(到execsql请求),然后从PHP到JS

Ajax从JS到PHP(到execsql请求),然后从PHP到JS,php,jquery,ajax,post,get,Php,Jquery,Ajax,Post,Get,我正在使用$.ajax方法将数据从JS文件传递到PHP文件“requetes.PHP”。这个PHP文件根据JS文件中的变量执行SQL请求 我的Javascript: $.ajax({ url: 'requetes.php', type: 'POST', data: { datepicker: formattedDate }, success: function(data) { $("#sql-results").text(data);

我正在使用
$.ajax
方法将数据从JS文件传递到PHP文件“requetes.PHP”。这个PHP文件根据JS文件中的变量执行SQL请求

我的Javascript:

$.ajax({
  url: 'requetes.php',
  type: 'POST',
  data: {
    datepicker: formattedDate
  },
  success: function(data) {             
    $("#sql-results").text(data);            
  },
  error: function(xhr) {
    console.log("echec de l'ajax !");
  }
})
在我的PHP文件中:

$rq_datepicker = "
    SELECT * 
    FROM partie
    WHERE date = '"$_POST['datepicker']"'";


$query = mysqli_query($connect, $rq_datepicker);
while ($result = mysqli_fetch_array($query)) {  
    echo "Il y a ".$result['Reussie']." partie(s)";
    echo "Il y a ".$result['Perdue']." partie(s);"
}
我已经减少了代码,因此更容易解释,但这非常有效。 我可以从JS到PHP获取“datepicker”变量,以便根据该变量执行SQL请求。 以及行
$(#sql results”).text(数据)从我的PHP文件返回我的2个回音

我的问题是:

我只想从我的JS文件中访问这两个变量
$result['reusie']
&
$result['Perdue']


我尝试过很多方法,比如使用$.ajax和方法GET,或者$.GET,但是没有成功

首先,您的代码容易受到SQL注入的攻击,您必须使用进行查询构建

另一件事是,您只需创建一个具有键值对的数组,然后使用json编码返回该数组

示例:
echo json_encode(数组('foo'=>'bar')

然后在ajax的js代码中,使用
var foo_result=JSON.parse(data['foo'])解析
data
现在您可以访问所需的变量

如果您达到了要求,请告诉我。

试试这个:

$.ajax({
 url: 'requetes.php',
 type: 'POST',
 data: {
  datepicker: formattedDate
},
success: function(data) {             
   $("#sql-results").html(data);            
},
 error: function(xhr) {
   console.log("echec de l'ajax !");
 }
 });



$datepick = strip_tags($_POST['datepicker']);
$rq_datepicker = "
SELECT * 
FROM partie
WHERE date = '$datepick'";


$query = $connet->query($rq_datepicker);
while ($result = $query->fetch_assoc()) {  
        echo "Il y a ".$result['Reussie']." partie(s)";
        echo "Il y a ".$result['Perdue']." partie(s);"
    }
 }

您必须以可以在JS中访问数据的方式构造PHP响应。 要做到这一点,通常使用JSON,这样就可以提供已经处理过的数据,并且只需在JS中本地访问它们

在本例中,您有两个要访问的变量。但我猜您也希望将它们格式化为您在jQuery中选择的某个对象

要实现这一点,有两种方法

第一个-在PHP中完成所有的处理,并使变量可用

PHP方面:

$rq_datepicker = "
    SELECT * 
    FROM partie
    WHERE date = '"$_POST['datepicker']"'";


    $query = mysqli_query($connect, $rq_datepicker);
    while ($result = mysqli_fetch_array($query)) { 
            $response['dataRaw'] = array('Reussie' => $result['Reussie'],
                                     'Perdue' => $result['Perdue']);
            $response['dataProcessed'] = array('Reussie' =>  "Il y a ".$result['Reussie']." partie(s)",
                                    'Perdue' => "Il y a ".$result['Perdue']." partie(s)");
        }
    }
echo json_encode($response); // <-- using this will encode the variable according to the json specifics
$rq_datepicker = "
    SELECT * 
    FROM partie
    WHERE date = '"$_POST['datepicker']"'";


    $query = mysqli_query($connect, $rq_datepicker);
    while ($result = mysqli_fetch_array($query)) { 
            $response['data'] = array('Reussie' => $result['Reussie'],
                                     'Perdue' => $result['Perdue']);
        }
    }
echo json_encode($response); // <-- using this will encode the variable according to the json specifics
第二个-PHP只是将变量传递给JS,然后在本地构建字符串

PHP方面:

$rq_datepicker = "
    SELECT * 
    FROM partie
    WHERE date = '"$_POST['datepicker']"'";


    $query = mysqli_query($connect, $rq_datepicker);
    while ($result = mysqli_fetch_array($query)) { 
            $response['dataRaw'] = array('Reussie' => $result['Reussie'],
                                     'Perdue' => $result['Perdue']);
            $response['dataProcessed'] = array('Reussie' =>  "Il y a ".$result['Reussie']." partie(s)",
                                    'Perdue' => "Il y a ".$result['Perdue']." partie(s)");
        }
    }
echo json_encode($response); // <-- using this will encode the variable according to the json specifics
$rq_datepicker = "
    SELECT * 
    FROM partie
    WHERE date = '"$_POST['datepicker']"'";


    $query = mysqli_query($connect, $rq_datepicker);
    while ($result = mysqli_fetch_array($query)) { 
            $response['data'] = array('Reussie' => $result['Reussie'],
                                     'Perdue' => $result['Perdue']);
        }
    }
echo json_encode($response); // <-- using this will encode the variable according to the json specifics
一些额外的:

仅使用带有回音的json_编码作为输出,而不声明响应类型,通常会将响应类型设置为“application/json”

为了避免这种“通常”,并确保响应的内容类型部分是“application/json”(如果是这种情况),您还应该设置响应的头

header("Content-type:application/json")
进一步阅读标题:


关于json_编码,请在此处阅读更多信息:

Yey guyys它可以工作!谢谢!所以我使用了这个解决方案:

在我的PHP文件中:

$response['data'] = array('Reussie' => $result['Reussie'], 'Perdue' => $result['Perdue']);
echo json_encode($response);
在我的JS文件中:

var response = JSON.parse(data);
var stringReussie = "Il y a "+response.data.Reussie+" partie(s)";
var stringPerdue = "Il y a "+response.data.Perdue+" partie(s)";
$("#sql-results").text(stringReussie+stringPerdue);
我只是不明白为什么我不能把标题放进去。看起来它“转换”了我所有的index.php文件。但它仍然有效,所以。。。我想没关系


你真棒

如果您想分别访问这两个PHP值,我建议您从PHP返回JSON,而不是从PHP返回JSON格式的响应,然后在js端随意使用
var response = JSON.parse(data);
var stringReussie = "Il y a "+response.data.Reussie+" partie(s)";
var stringPerdue = "Il y a "+response.data.Perdue+" partie(s)";
$("#sql-results").text(stringReussie+stringPerdue);