使用json_encode和jquery.ajax()时如何返回特定值?

时间:2011-05-24 01:29:50

标签: php jquery ajax json

我想知道如何在我的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);
            }
        });

2 个答案:

答案 0 :(得分:2)

似乎没有将响应JSON解析为对象,这就是alert()显示整个字符串的原因(否则你会看到[object Object])。您可以自己解析它,但更好的解决方案可能是执行以下一项(或两项):

  1. dataType = "json"添加到ajax()的调用中,告诉jQuery您希望JSON作为响应;然后,jQuery将解析结果并为您提供一个可以使用的data对象,而不仅仅是一个字符串。另请注意,alert()只接受一个参数,所有后续参数都将被忽略。

  2. 更新您的PHP以使用正确的内容类型header('Content-type: application/json');进行响应 - 这将允许jQuery自动确定响应是JSON并且它将为您解析它,而不需要{{1}价值。这也将使其他消费者更容易,因为您将明确指定数据类型。

答案 1 :(得分:0)

我通常使用以下内容来处理返回的json对象:

data = $.parseJSON(data);

然后data.lastID应返回您期望的lastID值。