Error de JQuery en Electron – JavaScript – Foros de SitePoint
Hola,
Estoy haciendo una llamada ajax en Electron que solo falla ocasionalmente. Si copio y pego los datos en el archivo del servidor php, funciona al 100%. Desafortunadamente, esto está matando mi flujo de trabajo y sucede en varias llamadas importantes de ajax. El error dice json no válido, token no válido ‘<'.
jQuery-3.6.1
Electrónica – 22.0.0
Ajax:
$.ajax({
url: 'http://localhost/OtherRealms/php/scripts/update_character_xml_field.php',
dataType: 'json',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: pipSkillData,
success: function( data, textStatus, jQxhr ){
//console.log(data);
},
error: function( jqXhr, textStatus, errorThrown ){
console.log( errorThrown );
}
// End updata skill
});
// end fetch skill tier
},
error: function( jqXhr, textStatus, errorThrown ){
console.log( errorThrown );
}
});
No debería haber necesidad de código de servidor. Solo compartiré lo que publiqué anteriormente para obtener información.
$datos[‘characterToken’] = ‘2205d49f4165e46eb3b65e32a1fa02d3’;
$datos[‘pipType’] = ‘habilidad pip’;
$datos[‘skillName’] = “mágico”;
$datos[‘skillType’] = “habilidad”;
$datos[‘tier’] = “II”;
$datos[‘userSerial’] = “9e0b6bf61339998735ff478db747ba04”;
$datos[‘userToken’] =”58e4d9a44dc47b84d4a2db84e9188cdc” ;
Here's a couple of images
If this can't be solved is there a work around? Would vanilla Ajax calls be better?
Este es probablemente el comienzo de un error de php del código del lado del servidor. ¿Qué muestra la respuesta completa en la pestaña de red de herramientas para desarrolladores del navegador?
Wow, me enseñaste algunas técnicas importantes de depuración. Hay un error en el guión. En la línea 50. Mi archivo xml se abre como bool. Pero en este caso no sé por qué. Porque funciona varias veces…
La línea 50 es esta línea:
$charactersDoc = simplexml_load_file($charactersXML);
Pero todo el guión es bastante simple…
xpath("//users/user[@token='$userToken']");
if(!empty($user))
{
$userSerial = $user[0]->serial['value'][0]->__toString();
if($data['userSerial'] === $userSerial)
{
// check if the character exists
$charactersDoc = simplexml_load_file($charactersXML);
$characterDoc = new SimpleXMLElement($charactersDoc->asXML());
$character = $charactersDoc->xpath("//character[@token='$characterToken']");
if(!empty($character))
{
switch($data['pipType'])
{
case 'pip amount up':
// pip field up by amount
switch($data['field'])
{
case 'hitPoints':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->hitPoints['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->hitPoints['value'] + $data['value'];
break;
case 'spiritPoints':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->spiritPoints['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->spiritPoints['value'] + $data['value'];
break;
case 'characterPoints':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->characterPoints['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->characterPoints['value'] + $data['value'];
break;
case 'skillPoints':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->skillPoints['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->skillPoints['value'] + $data['value'];
break;
case 'craftingLicenses':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->craftingLicenses['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->craftingLicenses['value'] + $data['value'];
break;
case 'gambit':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->gambit['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->gambit['value'] + $data['value'];
break;
case 'labourPoints':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->labourPoints['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->labourPoints['value'] + $data['value'];
break;
case 'toxLimit':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->toxLimit['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->toxLimit['value'] + $data['value'];
break;
case 'toxLimitMax':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->toxLimitMax['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->toxLimitMax['value'] + $data['value'];
break;
case 'valour':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->valour['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->valour['value'] + $data['value'];
break;
case 'soul':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->soul['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->soul['value'] + $data['value'];
break;
case 'sleight':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->sleight['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->sleight['value'] + $data['value'];
break;
case 'beauty':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->beauty['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->beauty['value'] + $data['value'];
break;
case 'wisdom':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->wisdom['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->wisdom['value'] + $data['value'];
break;
case 'constitution':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->constitution['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->constitution['value'] + $data['value'];
break;
case 'aptitude':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->aptitude['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->aptitude['value'] + $data['value'];
break;
case 'courage':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->courage['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->courage['value'] + $data['value'];
break;
case 'perception':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->perception['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->perception['value'] + $data['value'];
break;
case 'fortitude':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->fortitude['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->fortitude['value'] + $data['value'];
break;
case 'reflexes':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->reflexes['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->reflexes['value'] + $data['value'];
break;
case 'willpower':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->willpower['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->willpower['value'] + $data['value'];
break;
}
break;
case 'pip amount down':
switch($data['field'])
{
case 'hitPoints':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->hitPoints['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->hitPoints['value'] - $data['value'];
break;
case 'spiritPoints':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->spiritPoints['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->spiritPoints['value'] - $data['value'];
break;
case 'characterPoints':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->characterPoints['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->characterPoints['value'] - $data['value'];
break;
case 'skillPoints':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->skillPoints['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->skillPoints['value'] - $data['value'];
break;
case 'craftingLicenses':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->craftingLicenses['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->craftingLicenses['value'] - $data['value'];
break;
case 'gambit':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->gambit['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->gambit['value'] - $data['value'];
break;
case 'labourPoints':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->labourPoints['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->labourPoints['value'] - $data['value'];
break;
case 'toxLimit':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->toxLimit['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->toxLimit['value'] - $data['value'];
break;
}
break;
case 'set value':
switch($data['field'])
{
case 'hitPoints':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->hitPoints['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->hitPoints['value'] = $data['value'];
break;
case 'spiritPoints':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->spiritPoints['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->spiritPoints['value'] = $data['value'];
break;
case 'toxLimit':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->toxLimit['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->toxLimit['value'] = $data['value'];
break;
case 'toxLimitMax':
$characterDoc->xpath("//character[@token='$characterToken']")[0]->toxLimitMax['value'] = $characterDoc->xpath("//character[@token='$characterToken']")[0]->toxLimitMax['value'] = $data['value'];
break;
case 'description':
// Implement: test this update
$characterDoc->xpath("//character[@token='$characterToken']")[0]->description = $data['value'];
break;
}
break;
case 'pip skill':
switch($data['skillType'])
{
case 'skill':
foreach($characterDoc->xpath("//character[@token='$characterToken']")[0]->skills->skill as $skillIndex => $skill)
{
if($skill['name']->__toString() == $data['skillName'])
{
$skill['tier'] = $data['tier'];
}
}
break;
case 'craft':
foreach($characterDoc->xpath("//character[@token='$characterToken']")[0]->crafts->craft as $skillIndex => $skill)
{
if($skill['name']->__toString() == $data['skillName'])
{
$skill['tier'] = $data['tier'];
}
}
break;
}
break;
}
// write the xml back into the file beautified
$dom = new DOMDocument;
$dom->preserveWhiteSpace = FALSE;
$dom->loadXML($characterDoc->asXML());
$dom->formatOutput = TRUE;
if(is_file($charactersXML))
{
file_put_contents($charactersXML, $dom->saveXML());
$returnMessage['message'] = 'success';
echo json_encode($returnMessage);
}
}else{
// empty user data and go back to login screen
}
}else{
// empty user data and go back to login screen
}
}
}
}else{
// do nothing
}
}else{
header('Location: ../../../index.php');
exit;
}
?>
Así que aquí está el error:
cotización en bloque
Advertencia: simplexml_load_file(): archivo:/C:/xampp/htdocs/OtherRealms/php/scripts…/…/…/…/…/Yen7AaH9rb/database/characters.xml:1: error de análisis: el documento está vacío C:\xampp\htdocs\OtherRealms\php\scripts\advance_balance.php en línea 57
Advertencia: simplexml_load_file(): en C:\xampp\htdocs\OtherRealms\php\scripts\advance_balance.php en línea 57
Advertencia: simplexml_load_file(): ^ en C:\xampp\htdocs\OtherRealms\php\scripts\advance_balance.php en línea 57
Error fatal: Error no detectado: llamar a la función miembro asXML() en bool en C:\xampp\htdocs\OtherRealms\php\scripts\advance_balance.php:58
Seguimiento de la pila:
#0 {principal}
saltó en C:\xampp\htdocs\OtherRealms\php\scripts\advance_balance.php en línea 58
Esto es extraño. Simplemente dice que el documento xml está vacío a veces, y solo aparece en las llamadas ajax de Electron en JQuery. Y no todas las veces. Justo cuando te sientes cómodo jugando conmigo, lol. Simplemente no puedo simular el error en el archivo de script.