la opción de datos no funciona correctamente en jquery ajax

Estoy haciendo una solicitud de ajax para llamar a algunas utilidades en el script PHP con el parámetro de datos se obtiene de HTML siguiente:

function get_jira(){
    var jira = document.getElementById('CR').value ;
    var jira_pre = document.getElementById('JRTEMP').value ;
    var jira_format = jira.match(/[a-zA-Z]{3}\-\d+/); 
    if((jira_format != null)&&(jira_format != jira_pre)){
        var data = {};
        data['jira'] = jira;
        $.ajax({
            url:'request_jirapage.php',    //the page containing php script
            type: "POST",    //request type,
            data: data,
            success: function(result){
                var tp =JSON.parse(result) ;
                console.log(tp);
                document.getElementById('JRTEMP').value = tp.key;
                document.getElementById('CASE').value = tp.fields.customfield_11106;
                document.getElementById('PID').value = tp.fields.customfield_10141;
                //document.getElementById('PW').value = tp.fields.assignee.displayName;
               
            }
        });
        
    }    
}

El id 'CR' es un cuadro de texto de entrada y su valor es "AKF-40831" y esta función está funcionando como se espera (tanto ajax como PHP script). Pero cuando los datos de ajax se cambian a jira_format como data['jira'] = jira_format ; entonces el script PHP no está funcionando correctamente (llamada deajax a PHP con éxito). Mientras que el valor de las variables jira y jira_format es idéntico. Traté de buscar en Google pero no pude obtener información relacionada. O la causa puede estar relacionada con el tipo de datos de ellos Registro de consolas: Cuando los datos ['jira'] = jira, obtendré la salida como:

{expand: "renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations", id: "994583", self: "http://abc_xyz.com/rest/api/latest/issue/994583", key: "AKF-40831", fields: {…}}
expand: "renderedFields,names,schema,operations,editmeta,changelog,versionedRepresentations"
fields: {resolution: {…}, customfield_10500: "

Y cuando los datos ['jira'] = jira_format, obtengo el error como abajo:

VM56:1 Uncaught SyntaxError: Unexpected end of JSON input
    at JSON.parse ()
    at Object.success (validate_form.js:67)
    at fire (jquery-3.5.1.js:3496)
    at Object.fireWith [as resolveWith] (jquery-3.5.1.js:3626)
    at done (jquery-3.5.1.js:9786)
    at XMLHttpRequest. (jquery-3.5.1.js:10047)

El script PHP:

php

    session_start();
    $jira1 = $_POST['jira'] ;
    if(isset($jira1)){
        $jira_template = "/[a-zA-Z]{3,4}\-\d+/";
        if(preg_match_all($jira_template, $jira1, $matches)){
            $jira = $matches[0][0];
           $user = 'abcxyz';
            $pwd = 'abcxyz';
            $curl = curl_init();
            $url = "http://abc_xyz.com/rest/api/latest/issue/" . $jira;
            // Optional Authentication:
            curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
            curl_setopt($curl, CURLOPT_USERPWD, "$user:$pwd");
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            //curl_setopt($curl, CURLOPT_SSLVERSION,3);
            curl_setopt($curl,CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1);
            curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt ($curl, CURLOPT_PORT , 80);
            $result = curl_exec($curl);
            $errors = curl_error($curl);
            curl_close($curl);
            //$res = json_decode($result, true);
            //$case = $res[fields][customfield_11106];.
            //echo json_encode(array("abc"=$case));
            echo $result;
        
       }
    }
    
    ?>

Ha fallado en la línea si (preg_match_all($jira_template, $jira1, $matches)). Nota: El valor de jira_format y jira es idéntico. ¿Pero por qué la salida es diferente?

Pregunta hecha hace 3 años, 4 meses, 25 días - Por scriptsorcerer4f7e


2 Respuestas:

  • El problema que estás experimentando está relacionado con la forma en que estás manejando los datos dentro de tu solicitud AJAX. El error "Uncaught SyntaxError: Unexpected end of JSON input" indica que la función JSON.parse ha recibido un string vacío o no válido como entrada.

    La razón por la que obtienes este error al cambiar a data['jira'] = jira_format; en lugar de data['jira'] = jira; es porque jira_format probablemente no está siendo asignado correctamente como un string válido en formato JSON en la función get_jira().

    Para resolver este problema, asegúrate de que jira_format sea un string válido en formato JSON antes de pasarlo a la solicitud AJAX. Puedes hacer esto utilizando JSON.stringify() para convertir el objeto en un string JSON legible.

    Por lo tanto, modifica la línea en la que asignas jira_format a data['jira'] en tu función get_jira() de la siguiente manera:

    javascript
    data['jira'] = JSON.stringify(jira_format);
    

    De esta manera, te aseguras de que jira_format se convierta en un string JSON válido antes de ser enviado a tu script PHP a través de la solicitud AJAX. Esto debería resolver el error de "Unexpected end of JSON input" que estás experimentando.

    Respondida el Dec 22, 2020 a las 03:53 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El problema con tu código es que estás intentando analizar una cadena JSON que contiene caracteres no válidos. La salida del script PHP contiene caracteres de control (por ejemplo, \n) que no son válidos en JSON. Esto provoca el error JSON.parse: unexpected end of JSON input.

    Para solucionar este problema, debes eliminar los caracteres de control de la salida del script PHP antes de intentar analizarla como JSON. Puedes hacer esto usando la función str_replace() de PHP para reemplazar todos los caracteres de control con una cadena vacía.

    Aquí tienes el código PHP modificado:

    php
    
    

    Con este cambio, los caracteres de control se eliminarán de la salida del script PHP y podrás analizarla correctamente como JSON en el lado del cliente.

    Respondida el Dec 22, 2020 a las 03:58 - por Gemini

    Votos positivos: 0 | Votos negativos: 0