我在这个问题上阅读了很多帖子,但我无法解决问题。 似乎ajax()工作正常,但.php文件无法更新SQL数据库并且没有向ajax()函数返回任何结果。
这是我的代码:
var datastring=JSON.stringify(utnew) $.ajax({ type: "POST", url: "myulr-php", data: datastring, dataType: "json", success: function(resto){ if (resto=="success"){ $("#pop-confermadatiuser").html("OK"); }else{ $("#pop-confermadatiuser").html("KO"); }; } });
php代码工作,我试过了。 这是代码:
header("Access-Control-Allow-Origin: *"); $con = mysqli_connect("sql","xxx","xxx","xxx") or die ("could not connect database"); $ck=1 ; if(isset($_POST['id'])) { $id=$_POST['id']; $nome=$_POST['nome']; $cognome=$_POST['cognome']; $matricola=$_POST['matricola']; $mail=$_POST['mail']; $password=$_POST['password']; $ck=2 $qry="UPDATE user SET nome='".$nome."', cognome='".$cognome."', mail='".$mail."', password='".$password."' where id=".$id." and matricola=".$matricola; $q=mysqli_query($con,$qry); if($q) { echo "success"; } else { echo "error"; }; mysqli_close($con); }; if(ck==1){ echo "error2"; };
答案 0 :(得分:0)
jQuery代码将POST数据作为JSON字符串发送,但是您的PHP代码正在寻找标准键值对。
您可以将Ajax调用更改为以键值格式发送。我看不到代码中的utnew
指的是什么,通常是Javascript对象或使用$.serialize()
序列化HTML表单的结果:
$.post("myurl.php", utnew, "json")
.always(function(response) { console.log(response); }
或者您可以更改PHP端,以期望POST负载中包含JSON编码的字符串,而不是编码的键/值对:
<?php
...
$data = json_decode(file_get_contents('php://input'));
if (isset($data['id'])) { ... }
无论选择哪种方式,您遇到的问题都是Ajax调用发送了一个JSON编码的字符串作为POST负载,但是PHP期望$_POST
中的键值对。
jQuery "json"
的{{1}}数据类型参数或快捷方式$.ajax
告诉jQuery期望返回值的格式,因此您的PHP代码应返回JSON编码的字符串。您的PHP代码正在发送回一个纯字符串,因此您应该告诉jQuery期望这样做:
$.post
或让PHP发回适当的JSON编码对象:
$.post(url, data, "text")
如果(应该)登录到文件时发生PHP错误,则可以使用echo json_encode(["result" => "success"]);
调试API端点,即error_log
会为您提供一些线索。