2012-12-29 168 views
0

我正在使用JSON從我的網站發送電子郵件。在php中發送和閱讀JSON

<script type="text/javascript"> 
    $("#contact-submit").click(function() { 
     if ($("#contact-captcha").text != "green") { 
      $("#contact-captcha").text = "Incorrect"; 
      $("#contact-captcha").css("border-color", "#7c0707"); 
     } 
     else 
     { 
      sendMail(); 
     } 
    }); 

    function sendMail() { 
     $.ajax({ 
      type: "POST", 
      url: 'includes/contact.php', 
      data: { to: '[email protected]', from: $('#contact-email').text(), subject: $('#contact-subject').val(), message: $('#contact-message').val() } 
     }); 
    } 
</script> 

現在的問題是我無法弄清楚如何:因爲只需通過<form>控制發送它似乎忽略了一點DIY「你是人類」確認我在做我正在做這樣閱讀contact.php上的JSON數據。

我見過在php代碼中定義JSON的教程,然後使用json_decode()來讀取它,這是不好的,因爲我不能在那裏定義JSON。

任何人都可以提供有關如何閱讀JSON的指導嗎?我想過使用querystring,但無法弄清楚如何在這裏做到這一點。

任何幫助將不勝感激。

在此先感謝!

+1

這將發送正常參數,而不是JSON字符串。 – Dogbert

+0

這是我需要json_encode()什麼的?從來沒有這樣做過... – Ortund

+0

在contact.php上,只需檢查$ _POST ['to']以確定您使用函數傳遞的值,而對於其他變量也是如此。 –

回答

2

當使用

data: { to: '[email protected]', from: $('#contact-email').text(), subject: $('#contact-subject').val(), message: $('#contact-message').val() } 

你會在$_POST['to']獲取數據,$_POST['from']

一個更好的方法(還沒有一個JSON方法),是使用這樣的:

var serialized = $("form").serialize(); 
serialized.to = "[email protected]"; 
$.ajax { ... data: serialized ... } 

和具有fromsubject,並message是i的name屬性輸入字段。

From: <input type="text" name="from"/> 

如果你想發送JSON(我看不出有任何理由這樣做),你可以這樣做:

json = JSON.stringify({ to: '[email protected]', from: $('#contact-email').text(), subject: $('#contact-subject').val(), message: $('#contact-message').val() }); 

,並使用data: { json: json }發送,最後做

json_decode($_POST['json']); 

返回關聯數組。

+0

我不確定你在說什麼,只要序列化去......我想在這裏做的是在.click事件驗證後發送數據。不在乎它如何發送。 – Ortund

+0

@Ortund,那就看我回答的前兩行:) – Dogbert

+1

@Ortund,如果你有幾個輸入,'serialize'會很有用,所以你不必選擇每一個輸入並調用'text()或者'val()'。 – Dogbert

0

在contacts.php

print_r($_POST) 

或使用Firebug在控制檯檢查提交期間,你可以很容易地找到你是否數據被正確發送(或者它是否在JSON ..等)

(我不確定你是如何做你的「人工驗證」檢查,但是,檢查字段值$(「#contact-captcha」)。text!=「green」不正確的方法(易於篡改並且從它自己的形式本身開始繞過它) 你需要在服務器端使用「隨機」文本創建一個哈希,並且會話它(或者發送到表單)和我們呃必須輸入文本並將其作爲POST發送到服務器。最後通過哈希驗證用戶輸入文本並與您創建的文本進行比較。 如果您正確地做到了這一點,請忽略它。 ^^「)

0

如果使用JSON是不是必須的,那麼你可以這樣來做。

使用您用於發送數據到contacts.php和下面的PHP代碼jQuery代碼。

在Contact.php

if(isset($_POST['to']) && $_POST['to'] != ''){ 

    $filterTO = $_POST['to']; 

    //filter value and get filtered value back in $filterTO here and use it further 
} 

您也可以使用同樣的方式與其他變量。

注意:強烈建議在使用前過濾變量。我只顯示了對你來說有問題的部分。這不是完整的標準過程。