我正在对我本地域的php文件进行AJAX调用。我遇到了一个问题,因为它没有在请求中返回成功函数的任何数据。
我正在序列化一个表单来发布数据以进入数据库。我可以正常工作,并且正在写入数据库。
问题是当我尝试将echoed语句显示在success函数的数据部分时。
我使用了警报,但它没有提醒任何事情。我试过一个console.log,只显示:
(an empty data string)
在我从mysql_函数切换到PDO函数之前,我已经完成了它。现在它还没有回归任何东西。我看了看this link in particular并且它仍然没有工作。
这就是我在ajax post请求中所拥有的:
var formstuff = $('#person-data').serialize();
$.ajax(
{
url: 'insert.php',
type: "POST",
dataType: 'text',
data: formstuff,
success:
function(data)
{
console.log(data);
alert(data);
$('#info').hide();
$('#info').html('');
$('#info').append(data);
$('#info').fadeIn(1500);
$("#person-data")[0].reset();
$('#username').css({'border': '1px solid #000', 'background-color': '#FFF', 'color': '#000'});
$('#username').css('background-image', 'url(images/txtbox/id.png)');
}
});
我已经检查了控制台中发布的标题,并且正在将输入的内容发布到表单字段中。
这是我想要回到成功函数的回声:
echo 'ID: '.$idp.' Lastname: '.$ln.' First Name: '.$fn.' added to the database';
这只是没有返回到成功函数。我试过这个没有使用try ... catch。我把它放在了试试中,没有任何东西。捕获错误将按原样发送回函数。
我尝试在尝试之前回应一些东西,然后在catch之前回显,并且在try之前将echo输出到success函数,而不是我需要的数据。
我还尝试过if语句,看看它是否有用,并且它不会显示任何内容。
我很难过,只是想知道是否有一些我能得到的指示。
TIA
修改
PDO信息:
try
{
$sqlp = $conn->prepare("INSERT INTO ".PERSON." (lastname, firstname, dob, adbkid) VALUES(:ln, :fn, :dob, :unp)");
$sqla = $conn->prepare("INSERT INTO ".ADDRESS." (address1, address2, town, county, postcode, country, lat, lng, personID) VALUES (:a1, :a2, :town, :county, :pc, :country, :lat, :lng, :una)");
$sqlc = $conn->prepare("INSERT INTO ".CONTACT." (landline, mobile, email1, email2, personID) VALUES (:lp, :mp, :e1, :e2, :unc)");
$sqlm = $conn->prepare("INSERT INTO ".MISC." (web, notes, photo, fbid, twitter, cat, personID) VALUES (:web, :notes, :pic, :fb, :tw, :cat, :unm)");
$sqlv = $conn->prepare("INSERT INTO ".VARI." (Time, Date, ipaddress, browser, os, personID) VALUES (:it, :idate, :iip, :ib, :ios, :unv)");
$sqlp->bindValue(':ln', $ln);
$sqlp->bindValue(':fn', $fn);
$sqlp->bindValue(':dob', $dob);
$sqlp->bindValue(':unp', $un);
$sqla->bindValue(':a1', $a1);
$sqla->bindValue(':a2', $a2);
$sqla->bindValue(':town', $town);
$sqla->bindValue(':county', $county);
$sqla->bindValue(':pc', $pc);
$sqla->bindValue(':country', $country);
$sqla->bindValue(':lat', $lat);
$sqla->bindValue(':lng', $lng);
$sqla->bindValue(':una', $un);
$sqlc->bindValue(':lp', $lp);
$sqlc->bindValue(':mp', $mp);
$sqlc->bindValue(':e1', $e1);
$sqlc->bindValue(':e2', $e2);
$sqlc->bindValue(':unc', $un);
$sqlm->bindValue(':web', $web);
$sqlm->bindValue(':notes', $notes);
$sqlm->bindValue(':pic', $pic);
$sqlm->bindValue(':fb', $fb);
$sqlm->bindValue(':tw', $tw);
$sqlm->bindValue(':cat', $cat);
$sqlm->bindValue(':unm', $un);
$sqlv->bindValue(':it', $it);
$sqlv->bindValue(':idate', $idate);
$sqlv->bindValue(':iip', $iip);
$sqlv->bindValue(':ib', $ib);
$sqlv->bindValue(':ios', $ios);
$sqlv->bindValue(':unv', $un);
$sqlp->execute();
$sqla->execute();
$sqlc->execute();
$sqlm->execute();
$sqlv->execute();
$idp = $sqlp->lastInsertId();
$ida = $sqla->lastInsertId();
$idc = $sqlc->lastInsertId();
$idm = $sqlm->lastInsertId();
$idv = $sqlv->lastInsertId();
echo $idp.' '.$ln.' '.$fn.' added';
}
catch (PDOException $e)
{
print '<div class="sqlerror">'.$e->getMessage().'</div>';
}
这是返回的内容,使用mysql
在文件中显示响应
这是使用PDO时返回的内容 - 没有数据也没有响应
答案 0 :(得分:1)
函数lastInsertId()
是一个适用于PDO
对象的方法,您可以尝试在PDOStatement
对象上调用它,试试这个:
$sqlp->execute();
$idp = $conn->lastInsertId();
$sqla->execute();
$ida = $conn->lastInsertId();
$sqlc->execute();
$idc = $conn->lastInsertId();
$sqlm->execute();
$idm = $conn->lastInsertId();
$sqlv->execute();
$idv = $conn->lastInsertId();
而不是
$sqlp->execute();
$sqla->execute();
$sqlc->execute();
$sqlm->execute();
$sqlv->execute();
$idp = $sqlp->lastInsertId();
$ida = $sqla->lastInsertId();
$idc = $sqlc->lastInsertId();
$idm = $sqlm->lastInsertId();
$idv = $sqlv->lastInsertId();