我有这个jquery脚本
$(function() { // <----doc ready starts
$("#btn1").click(function(e) {
e.preventDefault();
var name = $("#id1").val();
var last_name = $("#id2").val();
var dataString = {'name=':name, 'last_name': last_name};
$.ajax({
type: 'POST',
dataType: 'jsonp',
url: 'http://localhost/insert.php',
success: function(data) {
alert(data);
}
});
});
});
这个php从第一个脚本插入参数到mysql数据库:
<?php
$conn = mysqli_connect('localhost', 'root', '');
$name = $_POST['name'];
$last_name = $_POST['last_name'];
$mysqli = new mysqli('localhost','root','','os');
if ($mysqli->connect_error) {
die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
}
$insert_row = $mysqli->query("INSERT INTO table_info (name, name2) VALUES($name, $last_name)");
if ($insert_row){
print 'Success! ID of last inserted record is : ' .$mysqli->insert_id .'<br />';
}
else {
die('Error : ('. $mysqli->errno .') '. $mysqli->error);
}
$mysqli->free();
$mysqli->close();
?>
当我试图运行它时,它失败并出现错误:
注意:未定义的索引:第3行的C:\ wamp \ www \ insert.php中的名称 注意:未定义的索引:第4行的C:\ wamp \ www \ insert.php中的last_name
错误:(1064)您的SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以获得正确的语法,以便在&#39;附近使用。 )&#39;在第1行
这里有什么问题,对不起愚蠢的问题,这是我第一次使用php和jQuery。
答案 0 :(得分:5)
您没有向AJAX调用提供dataString
变量,因此不会发送任何数据。您需要将其添加到data
的{{1}}属性中:
$.ajax
请注意,我还修复了对象定义中的$("#btn1").click(function(e) {
e.preventDefault();
var name = $("#id1").val();
var last_name = $("#id2").val();
var dataString = { 'name': name, 'last_name': last_name };
$.ajax({
type: 'POST',
dataType: 'jsonp',
url: 'http://localhost/insert.php',
data: dataString,
success: function(data) {
alert(data);
}
});
});
拼写错误。
答案 1 :(得分:1)
生成有效的dataString
。尝试使用 -
var dataString = "{'name=':"+name+", 'last_name': "+last_name+"}";
并将其传递给电话 -
$.ajax({
type: 'POST',
data: dataString,
dataType: 'json',
url: 'http://localhost/insert.php',
success: function(data) {
alert(data);
}
});
答案 2 :(得分:1)
您正试图从$_POST
读取,但您正在提出GET请求。
根据规范,JSONP 始终 GET。您无法使用该技术发出POST请求。
由于您说type: 'POST',
, dataType: 'jsonp',
将被忽略
您还尝试阅读name
,但您已拨打了您的字段name=
。您需要在整个过程中使用相同的名称。
当您收到回复时,您将收到错误,因为您的PHP脚本没有使用JSONP进行响应。
你需要header("Content-Type: application/javascript");
,然后是:
echo $_GET['callback'] . "(" . json_encode($your_response) . ");";
...但您应该通过清理回调名称来为the Rosetta vulnerability添加保护。
或者,删除dataType: 'jsonp',
并将header("Content-Type: text/plain");
添加到PHP。
答案 3 :(得分:0)
在此行之后:键入:'POST',添加以下行:data:dataString,
答案 4 :(得分:-2)
`enter code here`try to change the ajax call like this
`enter code here`$(function() { // <----doc ready starts
`enter code here` $("#btn1").click(function(e) {
`enter code here` e.preventDefault();
var name = $("#id1").val();
var last_name = $("#id2").val();
var dataString = {'name=':name, 'last_name': last_name};
$.ajax({
type: 'POST',
dataType: 'jsonp',
url: 'http://localhost/insert.php',
data: JSON.stringify(dataString),
success: function(data) {
alert(data);
}
});
});
});