Как я могу вернуть определенные значения при использовании json_encode с jquery.ajax ()? - PullRequest
1 голос
/ 24 мая 2011

Мне интересно, как ссылаться на определенные переменные в моей функции успеха jquery.ajax ().

Мой php-код на addit.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 ]

2 голосов
/ 24 мая 2011

Кажется, что ответ JSON не анализируется в объекте, поэтому alert() отображает всю строку (в противном случае вы увидите [object Object]). Вы можете разобрать его самостоятельно, но лучшим решением может быть одно (или оба) из следующего:

  1. Добавьте dataType = "json" к вызову ajax(), чтобы сообщить jQuery, что вы ожидаете JSON в качестве ответа; Затем jQuery проанализирует результат и выдаст вам объект data, с которым вы можете работать, а не просто строку. Также обратите внимание, что alert() принимает только один аргумент, все последующие будут просто игнорироваться.

  2. Обновите ваш PHP, чтобы он отвечал правильным типом содержимого header('Content-type: application/json'); - это позволит jQuery автоматически определить, что ответ является JSON, и проанализирует его для вас, не требуя значения dataType. Это также облегчит работу других потребителей, поскольку вы будете явно указывать тип данных.

0 голосов
/ 24 мая 2011

Я обычно использую следующее для обработки возвращенного объекта json:

data = $.parseJSON(data);

Тогда data.lastID должен вернуть ожидаемое вами значение lastID.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...