Php 在Url中使用斜杠时使Ajax请求崩溃

Php 在Url中使用斜杠时使Ajax请求崩溃,php,jquery,ajax,.htaccess,Php,Jquery,Ajax,.htaccess,我有一个简单的项目,用于在重写Url时测试Ajax请求,如下所示: http://localhost/ajax/aaaa/ htaccess: Options +FollowSymLinks RewriteEngine On RewriteCond %{SCRIPT_FILENAME} !-d RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule ^(.*)$ index.php?param=$1 index.php: <

我有一个简单的项目,用于在重写Url时测试Ajax请求,如下所示:

http://localhost/ajax/aaaa/
htaccess:

Options +FollowSymLinks  
RewriteEngine On  

RewriteCond %{SCRIPT_FILENAME} !-d  
RewriteCond %{SCRIPT_FILENAME} !-f  



RewriteRule ^(.*)$ index.php?param=$1
index.php:

<?php 

if (!isset($_GET['param'])){

    include('home.php');

}


if (isset($_GET['param'])){

include('tick.php');

}

?>
request.php:

<?php 

require("config.inc.php");
require("Database.singleton.php");

$k_name=$_POST['k_name'];
$data = array();

//Connect To DB
    $db= new Database(DB_SERVER, DB_USER, DB_PASS, DB_DATABASE);
    $db->connect();


    $sql = "SELECT id, name FROM table1 WHERE name=$k_name ";
    $rows = $db->fetch_array($sql);



    foreach($rows as $record){
        $data[] = array('id' => $record['id'], 'name' => $record['name']); 
    }



echo json_encode(array_values($data));
 ?>
注意:我的文件夹项目名称是Ajax

Ajax请求工作正常,但在Url中使用斜杠时,如下所示:

http://localhost/ajax/aaaa/

Ajax请求崩溃了,我现在必须使用框架来测试请求调度,但我不明白为什么会出现这个问题。

您没有破坏Ajax。您的代码中存在漏洞,并且缺少任何形式的错误处理:

您直接将AJAX值插入到查询中:

$sql = "SELECT id, name FROM table1 WHERE name=$k_name ";
                                               ^^^^^^^
这会导致如下查询:

SELECT ... WHERE name=foo
除非表中有一个名为foo的字段,否则这将导致语法错误并终止查询。但是,由于您没有任何错误处理,因此只需假设查询永远不会失败,并继续处理错误数据

您可能已经收到了关于在输出的非对象上调用方法的PHP警告。由于调用JS的代码期望JSON作为响应返回,因此该错误将导致JSON解析错误,诸如此类

简言之,如果您不愿意进行最基本的错误处理,这是可以避免的:

if (query failed) {
   output json error message
} else {
   process query results
}

永远不要假设成功。总是假设失败,把成功当作惊喜。查询成功的方法只有一种,而失败的方法几乎是无限的。拉斯维加斯赌场欢迎您,因为您将无限大的机会中的一个视为成功的保证。

什么意思?你得到了什么错误?我的意思是当url是:ajax请求返回json数据,但在url中添加斜杠如下:不返回任何数据我的zip文件中的项目:name=$k_name是一个示例,在实际项目中,我使用escape和其他算法进行验证,但我的问题是url中的斜杠
SELECT ... WHERE name=foo
if (query failed) {
   output json error message
} else {
   process query results
}