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 dedata['jira'] = jira;
es porquejira_format
probablemente no está siendo asignado correctamente como un string válido en formato JSON en la funciónget_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 utilizandoJSON.stringify()
para convertir el objeto en un string JSON legible.Por lo tanto, modifica la línea en la que asignas
jira_format
adata['jira']
en tu funciónget_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 errorJSON.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