0

ねえ、私はphpスクリプトでajaxjsonを介して送信されるフォーム値を取得する方法を理解しようとしています。

$.ajax
({
    type: "POST",
    url: "http://www.xxx.com/cart/gateway",
    dataType: 'json',
    async: false,
    contentType: "json",
    data: JSON.stringify({ "unique_id": $("#order_unique_id").val(), "name_on_card" : $("#name_on_card").val(), "card_number" : $("#card_number").val(), "expiry_date" : $("#expiry_date").val(), "cvv_code" : $("#cvv_code").val() }),
    success: function (data) {
        if (data && data != null && data["success"] != null && data["orderid"]) {
                processSuccess(data["orderid"]);
            } else if (data && data != null && data["error"] != null) {
                processError(data["error"]);
            } else {
                processError('unknown');
            }
            processing = false; 
    }
})

現在、エラーが発生していますが、それはフォームからPOST値を検索しているためです。そのコードは次のとおりです。

 public function __construct(&$page, $params) {
    $page->cart = new theCart();
    $page->cart->set_form();

    switch($action){
        case 'gateway':
            $this->checkoutCart($page);
            break;

 ...}

 function set_form()
{
$this->setFormValue('b_email');
$this->setFormValue('b_first_name');
$this->setFormValue('b_last_name');
.....etc etc
//ADDED 7/25/2012
$this->setFormValue('name_on_card'); 
$this->setFormValue('card_number'); 
$this->setFormValue('expiry_date'); 
$this->setFormValue('cvv_code'); 
$this->setFormValue('order_unique_id'); 

$this->verified = false;
 }

 function setFormValue($name){
   if(isset($_POST[$name])){
     $this->$name = trim($_POST[$name]);
   }
 }

 private function checkoutCart(&$page){
    $page->part->body->content_html = $this->pPay($page, $this->getPay());
}

 private function getPay(){
    //echo 'getP== ' . json_decode( $_POST[ 'unique_id' ], true );
    echo 'getP== ' . $_POST['unique_id'];

    return array(
        'unique_id' => $_POST['unique_id'],
        'name_on_card' => $_POST['name_on_card'],
        'card_number' => $_POST['card_number'],
        'expiration_date' => $_POST['expiry_date'],
        'cvv_code' => $_POST['cvv_code']
    );
}

上記の$_POST['unique_id']の値を取得していません。

元の郵便番号は次のとおりです。

$.post("http://www.xxx.com/cart/gateway",
        {
            unique_id:$("#order_unique_id").val(),
            name_on_card:$("#name_on_card").val(),
            card_number:$("#card_number").val(),
            expiry_date:$("#expiry_date").val(),
            cvv_code:$("#cvv_code").val()   
        },
        function(data) {
            if (data && data != null && data["success"] != null && data["orderid"]) {
                processSuccess(data["orderid"]);
            } else if (data && data != null && data["error"] != null) {
                processError(data["error"]);
            } else {
                processError('unknown');
            }
            processing = false;
        },
        "json"
);

しかし、正しくフォーマットできなかったため、それは機能しませんでした(json応答を探しています..それは?blah = blah&blah = blah....に入れられたようです。コードの$.POST部分..しかし、エラーが目的の形式(json)になっていない場合は、意味がありません。

どうすればこれを修正できますか?

4

3 に答える 3

0

が文字列の場合data、クエリ文字列である必要があります。JSON.stringifyJSONに変換します。dataオブジェクトを渡すだけで、クエリ文字列への変換が処理されます。

編集: つまり、変更:

data: JSON.stringify({ "unique_id": $("#order_unique_id").val(), "name_on_card" : $("#name_on_card").val(), "card_number" : $("#card_number").val(), "expiry_date" : $("#expiry_date").val(), "cvv_code" : $("#cvv_code").val() }),

data: { "unique_id": $("#order_unique_id").val(), "name_on_card" : $("#name_on_card").val(), "card_number" : $("#card_number").val(), "expiry_date" : $("#expiry_date").val(), "cvv_code" : $("#cvv_code").val() },
于 2012-07-25T19:54:21.093 に答える
0

PHP は、フォームでエンコードされたデータ (application/x-www-form-urlencoded) を想定しています。

JSON を dataType として渡さないでください。

$.post("http://www.xxx.com/cart/gateway",
        {
            unique_id:$("#order_unique_id").val(),
            name_on_card:$("#name_on_card").val(),
            card_number:$("#card_number").val(),
            expiry_date:$("#expiry_date").val(),
            cvv_code:$("#cvv_code").val()   
        },
        function(data) {
            if (data && data != null && data["success"] != null && data["orderid"]) {
                processSuccess(data["orderid"]);
            } else if (data && data != null && data["error"] != null) {
                processError(data["error"]);
            } else {
                processError('unknown');
            }
            processing = false;
        }
        // don't do this
        // ,"json"
);
于 2012-07-25T19:57:36.483 に答える
0

post vars を送信する代わりにリクエスト ボディで JSON を渡しているため、リクエスト ボディから json を取得し、解析してから値を取得する必要があります。

$request_body = file_get_contents('php://input');

$json = json_decode($request_body);

// use $json.unique_id

参考:リクエストペイロードの取得方法

于 2012-07-25T20:03:18.420 に答える