问题描述
|
我想知道如何在我的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\",success: function(data){
alert(data.lastId,data.cleanQuote);
}
});
解决方法
似乎响应JSON没有被解析为一个对象,这就是为什么
alert()
显示整个字符串的原因(否则您会看到[object Object]
)。您可以自己解析它,但是更好的解决方案可能是执行以下一项(或两项):
在ajax()
的调用中添加dataType = \"json\"
,以告诉jQuery您期望使用JSON作为响应;然后,jQuery将解析结果,并为您提供一个您可以使用的data
对象,而不仅仅是一个字符串。另外,请注意,“ 4”仅接受一个参数,所有后续参数都将被忽略。
更新您的PHP以使用正确的内容类型header(\'Content-type: application/json\');
进行响应-这将使jQuery自动确定响应是JSON,它将为您解析该响应,而无需使用dataType
值。由于您将明确指定数据类型,因此这也将使其他使用者更轻松。
,我通常使用以下命令来处理返回的json对象:
data = $.parseJSON(data);
然后data.lastID应该返回您期望的lastID值。