Función de éxito de Jquery Ajax basada en la respuesta de la matriz

Tengo un formulario que envía datos a través de una llamada Jquery Ajax a una función de controlador, que procesa los datos y luego obtiene una respuesta de una API de terceros.

Los datos se envían a través de POST al controlador y luego dichos datos se envían a través de Curl a la API de terceros, que luego se devuelven en una cadena y luego se convierten en una matriz, y finalmente se codifican en json.

Estoy atascado donde puedo devolver la matriz usando " echo json_encode($array); ", sin embargo, parece que no puedo averiguar cómo funciona la matriz.

Lo que finalmente quiero hacer es si la tecla "resultado" en la matriz = "falló", entonces agregaría un mensaje a un div, si es igual a "resultado" = "éxito", luego agregaría un mensaje y ejecutar una segunda función.

La respuesta Array que devuelvo es: {"transaction_id":"8267_03-01-12_16:02:58_0","action":"payment","result":"failed","errors":"98","errors_meaning":"(98)","customer_errors_meaning":"","processing_time":"0.0117"}

Aquí está el código que tengo

El formulario y el código Jquery:

<div class="creditcard">
    <form method="post">
        <strong>Credit Card Type:</strong>
        <select name="cc_type" id="cc_type" size="1">
            <option value="VISA">Visa</option>
            <option value="MASTERCARD">MasterCard</option>
        </select>

        <strong>Credit Card Number:</strong>
        <input type="text" name="cc_number" id="cc_number" size="24" value="">

        <strong>Credit Card Expiration Date:</strong>
        <select name="cc_expdate_month" id="cc_expdate_month">
            <option value="01" >01</option>
            <option value="02" >02</option>
            <option value="03" >03</option>
            <option value="04" >04</option>
            <option value="05" >05</option>
            <option value="06" >06</option>
            <option value="07" >07</option>
            <option value="08" >08</option>
            <option value="09" >09</option>
            <option value="10" >10</option>
            <option value="11" >11</option>
            <option value="12" >12</option>
        </select> / <select name="cc_expdate_year" id="cc_expdate_year">
            <option value="06" >2006</option>
            <option value="07" >2007</option>
            <option value="08" >2008</option>
            <option value="09" >2009</option>
            <option value="10" >2010</option>
            <option value="11" >2011</option>
            <option value="12" >2012</option>
            <option value="13" >2013</option>
            <option value="14" >2014</option>
            <option value="15" >2015</option>
            <option value="16" >2016</option>
        </select>

        <strong>Credit Card Security Code:</strong>
        <input type="text" name="cc_security_code" id="cc_security_code" size="4" maxlength="4" value="">
        <input type="hidden" name="business" id="business" value="xxxx@xxxx.xxx" />
        <input type="hidden" name="action" id="action" value="payment" />
        <input type="hidden" name="vericode" id="vericode" value="xxxxxxxx" />

        <input type="hidden" name="first_name" id="first_name" value="testname" />
        <input type="hidden" name="last_name" id="last_name" value="testlname" />

        <input type="hidden" name="address" id="address" value="testaddress" />
        <input type="hidden" name="city" id="city" value="testcity" />
        <input type="hidden" name="state_or_province" id="state_or_province" value="AL" />
        <input type="hidden" name="zip_or_postal_code" id="zip_or_postal_code" value="12345" />
        <input type="hidden" name="country" id="country" value="US" />
        <input type="hidden" name="shipping_address" id="shipping_address" value="testaddress" />
        <input type="hidden" name="shipping_city" id="shipping_city" value="testcity" />
        <input type="hidden" name="shipping_state_or_province" id="shipping_state_or_province" value="AL" />
        <input type="hidden" name="shipping_zip_or_postal_code" id="shipping_zip_or_postal_code" value="12345" />
        <input type="hidden" name="shipping_country" id="shipping_country" value="US" />
        <input type="hidden" name="phone" id="phone" value="1234567890" />
        <input type="hidden" name="email" id="email" value="email@wemail.es" />

        <input type="hidden" name="item_name" id="item_name" value="xxxx.xxx" />
        <input type="hidden" name="item_code" id="item_code" value="Product Name 3," />
        <input type="hidden" name="quantity" id="quantity" value="1" />
        <input type="hidden" name="amount" id="amount" value="205.00" />
        <input type="hidden" name="transaction_id" id="transaction_id" value="1060" />
        <input type="hidden" name="shipment" id="shipment" value="yes" />
        <input type="hidden" name="shipment_method" id="shipment_method" value="USPS Priority Mail" />
        <input type="hidden" name="ip_address" id="ip_address" value="123.45.67.89" />
        <input type="hidden" name="test_php" value="1" />

        <input type="submit" value="Authorize Credit Card" name="authorize_cc" id="authorize_cc" />
        <div class="authorization_result"></div>
    </form>
</div>
<script defer="defer" type="text/javascript">
$(document).ready(function() {

$('#authorize_cc').click(function() {
    var postData = {
        'authorize' : 1 ,
        'cc_type' : $("#cc_type").val(),
        'cc_number' : $("#cc_number").val(),
        'cc_expdate_month' : $("#cc_expdate_month").val(),
        'cc_expdate_year' : $("#cc_expdate_year").val(),
        'cc_security_code' : $("#cc_security_code").val(),
        'business' : $("#business").val(),
        'action' : $("#action").val(),
        'vericode' : $("#vericode").val(),
        'first_name' : $("#first_name").val(),
        'last_name' : $("#last_name").val(),
        'address' : $("#address").val(),
        'city' : $("#city").val(),
        'state_or_province' : $("#state_or_province").val(),
        'zip_or_postal_code' : $("#zip_or_postal_code").val(),
        'country' : $("#country").val(),
        'shipping_address' : $("#shipping_address").val(),
        'shipping_city' : $("#shipping_city").val(),
        'shipping_state_or_province' : $("#shipping_state_or_province").val(),
        'shipping_zip_or_postal_code' : $("#shipping_zip_or_postal_code").val(),
        'shipping_country' : $("#shipping_country").val(),
        'phone' : $("#phone").val(),
        'email' : $("#email").val(),
        'item_name' : $("#item_name").val(),
        'item_code' : $("#item_code").val(),
        'quantity' : $("#quantity").val(),
        'amount' : $("#amount").val(),
        'transaction_id' : $("#transaction_id").val(),
        'shipment' : $("#shipment").val(),
        'shipment_method' : $("#shipment_method").val(),
        'ip_address' : $("#ip_address").val(),
    };

    $.ajax({
            url: "<?php echo base_url().'admin/creditcard/authorize';?>",
            type:'POST',
            data: postData,
            dataType: 'json',
            success: function(output_string){
                $(".authorization_result").append(output_string);

            }
            }); // End of ajax call
    return false;       
}); 
});

</script>

La función del controlador

function authorize(){
// Get variables from POST array
$post_str = "action=payment&business="      .urlencode($this->input->post('business'))
            ."&vericode="                   .urlencode($this->input->post('vericode'))
            ."&item_name="                  .urlencode($this->input->post('item_name'))
            ."&item_code="                  .urlencode($this->input->post('item_code'))
            ."&quantity="                   .urlencode($this->input->post('quantity'))
            ."&amount="                     .urlencode($this->input->post('amount'))
            ."&cc_type="                    .urlencode($this->input->post('cc_type'))
            ."&cc_number="                  .urlencode($this->input->post('cc_number'))
            ."&cc_expdate="                 .urlencode($this->input->post('cc_expdate_year')).urlencode($this->input->post('cc_expdate_month'))
            ."&cc_security_code="           .urlencode($this->input->post('cc_security_code'))
            ."&shipment="                   .urlencode($this->input->post('shipment'))
            ."&first_name="                 .urlencode($this->input->post('first_name'))
            ."&last_name="                  .urlencode($this->input->post('last_name'))
            ."&address="                    .urlencode($this->input->post('address'))
            ."&city="                       .urlencode($this->input->post('city'))
            ."&state_or_province="          .urlencode($this->input->post('state_or_province'))
            ."&zip_or_postal_code="         .urlencode($this->input->post('zip_or_postal_code'))
            ."&country="                    .urlencode($this->input->post('country'))
            ."&shipping_address="           .urlencode($this->input->post('shipping_address'))
            ."&shipping_city="              .urlencode($this->input->post('shipping_city'))
            ."&shipping_state_or_province=" .urlencode($this->input->post('shipping_state_or_province'))
            ."&shipping_zip_or_postal_code=".urlencode($this->input->post('shipping_zip_or_postal_code'))
            ."&shipping_country="           .urlencode($this->input->post('shipping_country'))
            ."&phone="                      .urlencode($this->input->post('phone'))
            ."&email="                      .urlencode($this->input->post('email'))
            ."&ip_address="                 .urlencode($this->input->post('ip_address'))
            ."&website_unique_id="          .urlencode($this->input->post('website_unique_id'));

            // Send URL string via CURL
            $backendUrl = "https://www.veripayment.com/integration/index.php";
            $this->curl->create($backendUrl);
            $this->curl->post($post_str);
            $return_str = $this->curl->execute();

            //-------------------------------------
            // Convert String to array
            //-------------------------------------

            $result = array();
            // Explode array where blanks are found
            $resparray = explode(' ', $return_str);

            if ($resparray)
            {
              // save results into an array
              foreach ($resparray as $resp) {
                $keyvalue = explode('=', $resp);
                if(isset($keyvalue[1])){
                $result[$keyvalue[0]] =  str_replace('"', '', $keyvalue[1]);
                }
              }
            }

            //echo $result array
            echo json_encode($result);
}

preguntado el 01 de marzo de 12 a las 21:03

oh hombre, nadie quiere atravesar este muro de código. ¿Puedes reducir tu código al mínimo absoluto que demuestre el problema? -

No veo una mención de 'fallido' o 'éxito' en ninguna parte de su $result formación. -

@BrianGlaz está implícito con la pregunta, en realidad no necesitamos esos detalles, solo necesita ver si existe una propiedad y se puede analizar. -

¡+1 por agregar la matriz de retorno! -

1 Respuestas

Dé una mirada condicional a su respuesta.

    $.ajax({
        url: "<?php echo base_url().'admin/creditcard/authorize';?>",
        type:'POST',
        data: postData,
        dataType: 'json',
        success: function(output_string){
            if(x = $.parseJSON(output_string)){
              if(x.property == 'true'){ //or  if(x.property != null){
                  $(".authorization_result").append(x);
              }else{
                 $(".authorization_result").append("fail");
               }
            }else{
                 $(".authorization_result").append("fail");
            }
        }
    });

respondido 01 mar '12, 21:03

¿Qué significa la x en este caso? - daniel adarve

es el JSON analizado. si el analizador se completa y no se queja, x será su JSON. si el analizador falla, entonces la secuencia de comandos no falla, simplemente falla. Es por eso que el condicional if no se ve muy bien. Y sí, hay una manera más elegante de hacer esto, solo soy perezoso. - eric hodonsky

Entonces, ¿dónde dice "propiedad" que sería la clave de matriz? - daniel adarve

es un objeto, pero sí, esa es la propiedad del objeto que está comprobando para obtener un valor. y 'true' era cualquier valor de cadena... por lo que podría ser cualquier cosa, solo necesita coincidir con el valor de x.property, o podría decir != null... - eric hodonsky

Y es posible que desee configurar var x; en algún lugar por encima de donde está configurado y utilizado, solo por buenas prácticas. - eric hodonsky

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.