Estoy pasando un JSON por XHR a una función PHP que hice para hacer requests a directorios.
Me sale un error que no consigo solventar. Me dice: Trying to get nod propertie of non-object.
Y en otra línea: Trying to get nd propertie of non-object.
El echo a $rawReq me imprime el json exactamente igual que como yo lo mandé. El JSON es igual que el del comentario.
Mi pregunta es como solucionar el error, no como hacerlo de otra forma.
/*
Get Request From Client holding list of Domains to hunt, plus list of dictionary urls to get. Expecting a json like:
{
nod: 2,
domain0: "google.com",
domain1: "yahoo.es",
nd: 1,
dictionary0: "raw.github..."
}
* domains->nod = number of domains *
* domains->nd = number dictionaries *
*/
function GRFC(array &$arr)
{
$rawReq = file_get_contents('php://input');
echo "$rawReq";
$domains = json_decode($rawReq);
$temp = "";
$arrayDomains = [];
$x = 0;
for($i = 0; $i < $domains->nod; ++$i)
{
$temp = "domain";
$temp += $i;
$arrayDomains[i] = $domains->$temp;
$x = $i;
}
for($i=0; $x < $domains->nd; ++$x)
{
$temp = "dictionary";
$temp +=$i; ++$i;
$arr[i] = $domains->$temp;
}
return $arrayDomains;
}
$domainsToHunt = GRFC($dictionariesToHunt);
Acabo de darme cuenta del error, los nombres las propiedades nod, domain0, domain1, nd y dictionary deben de ir entre comillas dobles.
{
"nod": 2,
"domain0": "google.com",
"domain1": "yahoo.es",
"nd": 1,
"dictionary0": "raw.github..."
}
Saludos!
Cita de: AlbertoBSD en 24 Diciembre 2019, 08:16 AM
Acabo de darme cuenta del error, los nombres las propiedades nod, domain0, domain1, nd y dictionary deben de ir entre comillas dobles.
{
"nod": 2,
"domain0": "google.com",
"domain1": "yahoo.es",
"nd": 1,
"dictionary0": "raw.github..."
}
Saludos!
Entonces porque lo llaman javascript object notation? En js es válido '--
Tenía una función con arrays/strings con el json a mano y al final opté por rescribirla toda como un objeto y pasarle stringify por mi salud mental. xD
Gracias
Cita de: @?0!,5^34 en 24 Diciembre 2019, 08:26 AM
Entonces porque lo llaman javascript object notation? En js es válido '--
Jajaja ya se, segun tengo entendido del lado de javascript es un poco mas permisivo con los objetos a la hora de procesarlos, pero PHP es mas estricto.
Como mandas tu data desde el cliente javascript, yo utilizo ajax o fetch y nunca he tenido ese tipo de detalles con el PHP en el backend
data:JSON.stringify(objeto)
Saludos!
Cita de: AlbertoBSD en 24 Diciembre 2019, 09:16 AM
Jajaja ya se, segun tengo entendido del lado de Javascrip es un poco mas permisivo con los objetos a la hora de procesarlos, pero PHP es mas estricto.
Como mandas tu data desde el cliente javascript, yo utilizo ajax o fetch y nunca he tenido ese tipo de detalles con el PHP en el backend
data:JSON.stringify(objeto)
Saludos!
Uso el submit de los forms o xmlHttpRequest. Fetch no lo uso porque de momento para el tipo de cosas que hago no me aporta mucho y me daría dolores de cabeza tener que mirar como remplazarlo por un polyfill.
js en los navegadores es muuuuuucho mas permisivo que lo que establece el standard, pero usualmente los otros lenguajes se apegan mucho al sandard
Cita de: @?0!,5^34 en 24 Diciembre 2019, 08:26 AM
Entonces porque lo llaman javascript object notation? En js es válido '--
Tenía una función con arrays/strings con el json a mano y al final opté por rescribirla toda como un objeto y pasarle stringify por mi salud mental. xD
Gracias
Es un subset de la notación de JS. Tampoco puedes usar números en la notación:
({ 0:1 , 2:3 }) //js valido, json invalido
La notación solo permite notación de strings como llaves hasta donde yo tengo entendido.