我想知道如何在我的jquery.ajax()成功函数中引用特定变量。
我在addit.php上的php代码
if ($_POST) {
$user_id = $_SESSION['user_id'];
$filename = $_SESSION['filename'];
$quote = $_POST['quote'];
$query = "INSERT INTO `submissions` (
`id` ,
`user_id`,
`quote` ,
`filename` ,
`date_added` ,
`uploaded_ip`
)
VALUES (
NULL , '{$user_id}', '{$quote}', '{$filename}', NOW(), '{$_SERVER['REMOTE_ADDR']}')
";
$db = DbConnector::getInstance();
$db->insert($query);
// remove funky characters from the quote
$cleanRemove = preg_replace("/[^a-zA-Z0-9\s]/", "", $quote);
// replace any whitespace with hyphens
$cleanQuote = str_ireplace(" ", "-", $cleanRemove);
// get the id of the last row inserted for the url
$lastInsertId = mysql_insert_id();
$returnUrl = array ("lastId"=>$lastInsertId, "cleanQuote"=>$cleanQuote);
echo json_encode($returnUrl);
}
我的jQuery代码:
$.ajax({
type: "POST",
url: "addit.php",
data: ({
// this variable is declared above this function and passes in fine
quote: quote
}),
success: function(msg){
alert(msg);
}
});
在警报中返回:
{"lastId":91,"cleanQuote":"quote-test-for-stack-overflow"}
我现在如何在成功函数中引用它?我正在尝试这样的东西,但它不起作用(在警报中返回“undefined”):
$.ajax({
type: "POST",
url: "addit.php",
data: ({
// this variable is declared above this function and passes in fine
quote: quote
}),
success: function(data){
alert(data.lastId,data.cleanQuote);
}
});
答案 0 :(得分:2)
似乎没有将响应JSON解析为对象,这就是alert()
显示整个字符串的原因(否则你会看到[object Object]
)。您可以自己解析它,但更好的解决方案可能是执行以下一项(或两项):
将dataType = "json"
添加到ajax()
的调用中,告诉jQuery您希望JSON作为响应;然后,jQuery将解析结果并为您提供一个可以使用的data
对象,而不仅仅是一个字符串。另请注意,alert()
只接受一个参数,所有后续参数都将被忽略。
更新您的PHP以使用正确的内容类型header('Content-type: application/json');
进行响应 - 这将允许jQuery自动确定响应是JSON并且它将为您解析它,而不需要{{1}价值。这也将使其他消费者更容易,因为您将明确指定数据类型。
答案 1 :(得分:0)
我通常使用以下内容来处理返回的json对象:
data = $.parseJSON(data);
然后data.lastID应返回您期望的lastID值。