【问题标题】:Problem to pass JSON / Ajax to PHP variable将 JSON / Ajax 传递给 PHP 变量的问题
【发布时间】:2018-12-10 19:14:19
【问题描述】:

我在跨度的 id 中捕获 JSON / Ajax 响应,好吧。但我无法将响应保存在 PHP 变量中。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script type="text/javascript">
$("#enviar").click(function(e) {
	e.preventDefault();
	var nombre = $("#nombre").val(),
	apellido = $("#apellido").val(),
	edad = $("#edad").val(),

	datos = {"nombre":nombre, "apellido":apellido,"edad":edad};

	$.ajax({
		url: "procesa.php",
		type: "POST",
		dataType: 'json',
		data: datos
	}).done(function(respuesta){
		if (respuesta.estado === "ok") {
			 $('#myName').text(respuesta.nombre);
             $('#myApellido').text(respuesta.apellido);
             $('#myEdad').text(respuesta.edad);
		}
	});
});
</script>
<form id="form">
<input type="text" id="nombre" placeholder="Nombre" accept="text/plain"><br><br>
<input type="text" id="apellido" placeholder="Apellido" accept="text/plain"><br><br>
<input type="number" id="edad" placeholder="Edad" accept="text/plain">

<input type="submit" id="enviar" value="Enviar">
</form>

答案在 span 的 id 中打印得很好,但是在我尝试的所有 POST 选项中,什么都没有打印。

<p>Name: <span id="myName"></span></p>
<p>Apellido: <span id="myApellido"></span></p>
<p>Edad: <span id="myEdad"></span></p>
<?php
echo $_POST["nombre"]; //Key json, nothing is printed.
echo $_POST["myName"]; //Name of var response, nothing is printed.
echo $_POST["respuesta.nombre"]; //Anothe json, nothing is printed.
$character = json_decode($respuesta);
echo $character->nombre; //nothing is printed. desperation
?>

procesa.php

header('Content-Type: application/json');
//Guardamos los datos en un array
$datos = array(
'estado' => 'ok',
'nombre' => $nombre, 
'apellido' => $apellido, 
'edad' => $edad
);
//Devolvemos el array pasado a JSON como objeto
echo json_encode($datos, JSON_FORCE_OBJECT);

有人可以帮我吗?

【问题讨论】:

  • var_dump() 你的$_REQUEST 看看你的数据在哪里
  • 您将 datos 对象发送到 PHP 服务器,因此只有这些密钥可用。 $_POST["myName"] 不存在,但 $_POST["apellido"] 应该存在。如果$_POST["apellido"] 没有数据,那说明你的 JS 没有给它任何数据。
  • 您将数据放在一个跨度中。当您提交表单时,跨度不会发送到 PHP,因为它们不是输入字段
  • 需要注意的一点是 JSON_FORCE_OBJECT 直到 php 5.3 才可用;如果您运行的是旧版本,它将返回 null。也就是说,没有理由将它包含在您正在使用的对象中。由于您使用的是键/值数组,它将返回一个对象。
  • 带有 spans 的 html/php... 那到底是什么?表单所在页面的那部分是吗?除非您发布到该页面,否则 php 将无法访问这些值。

标签: php jquery arrays json ajax


【解决方案1】:

最后,没有人给出正确答案。如果有人问一个问题,那是因为他们不知道答案,并且应该在这里他们可以得到帮助,只有极少数人关心理解问题并尝试提供一些解决方案,但也有其他人认为他们是代码的聪明/天才,他们只会批评,他们不会贡献任何东西。

【讨论】:

    【解决方案2】:

    真的很简单。

    在你的 Javascript 中你有这个:

    $.ajax({
        url: "procesa.php", <-- data is sent to this page
        type: "POST",
        ...
    });
    

    那么对于那个页面,你有这个:

    The procesa.php
    
    header('Content-Type: application/json');
    //Guardamos los datos en un array
    $datos = array(
        'estado' => 'ok',
        'nombre' => $nombre, <-- this is undefined
        'apellido' => $apellido, <-- this is undefined
        'edad' => $edad <-- this is undefined
    );
    //Devolvemos el array pasado a JSON como objeto
    echo json_encode($datos, JSON_FORCE_OBJECT);
    

    不管这是什么:

    <p>Name: <span id="myName"></span></p>
    <p>Apellido: <span id="myApellido"></span></p>
    <p>Edad: <span id="myEdad"></span></p>
    <?php
        echo $_POST["nombre"]; //Key json, nothing is printed.
        echo $_POST["myName"]; //Name of var response, nothing is printed.
        echo $_POST["respuesta.nombre"]; //Anothe json, nothing is printed.
        $character = json_decode($respuesta);
        echo $character->nombre; //nothing is printed. desperation
    ?>
    

    这显然不是procesa.php 的一部分,您发送的是 AJAX 帖子。因此,显而易见的是,您无法从该位置获取您的帖子数据,因为那不是您发送它的位置。您发送它的地方没有任何代码来处理它,因此问题。

    至少基于发布的代码。

    【讨论】:

    • 我也猜测了一下,但我认为他可能一直在尝试为他的表单创建一个没有 javascript 的后备。
    • @LawrenceJohnson - 这就是我没有提供实际解决方案的原因,只是对看起来有问题的地方进行了分析。如果没有更多内容,很难说。
    • 我没有放procesa.php的完整代码,因为我以为你明白了。此外,这不是提出的问题。但在这里我把它完成了。
    • $nombre = $_POST["nombre"]; $apellido = $_POST["apellido"]; $edad = $_POST["edad"]; header('Content-Type: application/json'); $datos = array('estado' => 'ok', 'nombre' => $nombre, 'apellido' => $apellido, 'edad' => $edad); echo json_encode($datos, JSON_FORCE_OBJECT);
    猜你喜欢
    • 2014-04-23
    • 2019-03-11
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 2013-03-05
    相关资源
    最近更新 更多