2011-05-24 7 views
1

jquery.ajax()成功関数で特定の変数を参照する方法が不思議です。json_encodeを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"} 

どのように私は今、成功していることを参照することができます関数? (警告で「未定義」を返す)私はこのような何かをしようとしていたが、それはうまくいきませんでした:

 $.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

それはなぜalert()あるJSONオブジェクトに解析されていない応答、のように思えます文字列全体が表示されます(そうでない場合は[object Object]と表示されます)。あなたは自分でそれを解析できますが、より良い解決策は、次のいずれか(または両方)を行うために次のようになります。

  1. あなたがレスポンスとしてJSONを期待しているのjQueryを伝えるためにajax()への呼び出しにdataType = "json"を追加します; jQueryはその結果を解析し、文字列だけでなく作業できるdataオブジェクトを提供します。また、alert()は1つの引数しか受け付けないことに注意してください。後続の引数はすべて無視されます。これはjQueryのは、自動的に応答がJSONであり、それはdataType値を必要とせずに、あなたのためにそれを解析することを把握することができます -

  2. は正しいコンテンツタイプheader('Content-type: application/json');で応答するためにあなたのPHPを更新します。これにより、明示的にデータ型を指定するので、他のコンシューマーにとっても簡単になります。その後data.lastIDはあなたがlastIDのための期待値を返す必要があります

    data = $.parseJSON(data); 
    

    :私は通常、返されたJSONオブジェクトを処理するために、次を使用し

+0

恐ろしい!それは働いた。ありがとう..アラートはデバッグのためだけだった。私は実際に両方の変数を使用してユーザーをリダイレクトするためのURLを構築しており、完全に機能しています。再度、感謝します。 –

+0

@bob_cobb偉大な、喜んで助けになる:) –

関連する問題