【发布时间】:2016-08-27 07:21:11
【问题描述】:
我的 jQuery 发布请求有问题:
$.post(
'http://localhost/***/ajax_bdd-change.php',
{'id': _id, 'id_key': id_key, 'table': table, 'data': data})
.fail(function(jqXHR, textStatus, errorThrown){
alert('Erreur: '+jqXHR.responseText);
})
.done(function(data){
alert($(data).text());
});
还有我的 PHP:
<?php
$id = json_decode($_POST['id']);
$id_key = json_decode($_POST['id_key']);
$table = json_decode($_POST['table']);
$data = json_decode($_POST['data']);
foreach ($_POST as $k=>$v) {
unset($_POST[$k]);
}
$rlt = array(
'erreur' => false,
'request' => 'none'
);
$tmp = 0;
$request = 'UPDATE '.$table.' SET';
foreach ($data as $target => $value) {
if ($tmp++>0)
$request = $request.',';
$request = $request.' '.$target.' = "'.$value.'"';
}
$request = $request.' WHERE '.$id_key.' LIKE "'.$id.'"';
$rlt['request'] = $request;
require('BDD_connexion.php');
if (!$rlt_bdd = mysqli_query($link, $request)){
$rlt['erreur'] = 'Erreur: Update not done';
}
$link->close();
echo json_encode($rlt);
exit();
?>
每次我运行我的代码时,它都遵循相同的路径:
- PHP 已正确执行
- jQuery 运行
.fail()- jqXHR.responseText 为空
我曾尝试强制 php 失败,当时 jQuery 正确运行了 done(function)。
- PHP 有一些错误
- jQuery 运行
.done()- 警报显示 php 错误
我尝试了很多方法,例如强制对每个 php 字符串变量进行 UTF8 编码。
我什至尝试强加一个简单的字符串,如json_encode('hello world');
经过多次测试,似乎是我以前的信息:
也许解释一下是有用的:
- 我的 javascript 在
laod()php 页面中。所以它必须有这样的结构:
- main.php --jQuery-->
load(second.php 变成div)
- second.php --jQuery-->
$.post(ajax_bdd-change.php)- ajax_bdd-change.php --return
$rlt-->second.php(jQuery 部分)我没有提到它,因为我觉得它不相关。
是这个问题的原因。我已经尝试从一个没有.load 的新 html 页面通过邮寄方式调用我的 php,它运行良好。
【问题讨论】:
-
你想在你的失败回调中检查
textStatus -
我尝试检查错误,因为我不明白为什么我总是运行
fail()function。我只是尝试textStatus它包含error -
我建议不要直接使用 $_POST 变量构建动态查询,除非您明确定义
id_key和table中允许的值,以及实际使用mysqli使其有价值 - 用于 SQL 注入预防的数据绑定/准备语句。该脚本原样非常危险。绑定见这里:php.net/manual/en/mysqli-stmt.bind-param.php -
您的建议似乎会产生影响...我发现一切正常,但是当我添加
mysqli_query($link, $request)时,它开始没有错误。 -
“Nate I”我的
$_POST是明确定义的,大部分不是用户给出的,而是代码直接传输的数据。
标签: javascript php jquery