将json_encode与jquery.ajax结合使用时,如何返回特定值?

问题描述

| 我想知道如何在我的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值。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...