【问题标题】:How can I send HTML data to PHP using JSON?如何使用 JSON 将 HTML 数据发送到 PHP?
【发布时间】:2017-02-19 13:57:26
【问题描述】:

我似乎无法理解如何将数据从我的 客户端 HTML 发送到我的 服务器端 PHP(这已经意味着它们不在同一个文件夹中并且没有在服务器中运行)并且只收到未识别变量的通知和致命错误:无法访问空属性。

我尝试了 W3Schools 中的方法,但仍然没有成功。为了确保我尝试复制粘贴它。还是一样。

所以我的问题是:如何发送这个简单的客户端 HTML/JavaScript 数据:-

<script>
function sender(){
obj = "tblname";
// how to send that data to the php server-side.
}
</script>

到这个PHP:-

<?php
header("Content-Type: application/json; charset=UTF-8");
$obj = json_decode($_GET["x"], false);

$conn = new mysqli("localhost", "root", "", "mydb");
$result = $conn->query("SELECT * FROM ".$objData);
$outp = array();
$outp = $result->fetch_all(MYSQLI_ASSOC);

echo json_encode($outp);
?>

使用 JSON?

如果有人能详细说明并给我看一个样本,那就太好了。

再次,我是使用 JSON 的菜鸟/新手,没有长期背景(我一周前才开始,已经有很多问题了)并且对于这种类型的客户完全一无所知 -与服务器通信。

我只需要简单的发送者代码(来自 JavaScript)和接收代码(来自 Php)一两行就可以了;并简要说明它们的工作原理。

我使用的是 Windows 7、Wamp3.0.6 和 Chrome。

PS:我是从 W3Schools 那里得到的。是的,它没有用。请不要含糊其辞。谢谢!

【问题讨论】:

  • 稍等。变量obj = "tblname"; 是从哪里来的?它来自 HTML 表单吗?你介意页面刷新吗?还是您想通过 AJAX 发送数据? JSON 并没有真正涉及到这一点,因为您只是发送一个字符串......
  • 当页面刷新时不可以,因为这可能会导致短期数据丢失。只要有解释,我就可以使用 AJAX。
  • 或者发布你的 JS 尝试,有人会帮助你。
  • 上次我尝试过,从未得到有效的答案。还有@charlietfl,如果你已经阅读了这个问题,你可能会明白我花了一周的时间;一个疯狂的眉毛脱落一周才能在 JSON 中达到这一点,我不能再花一周时间试图理解和询问有关 AJAX 的更多问题。我只想知道如何以解释和简单的方式将 那个 javascrpt 数据发送到我的 php。我的意思是有很多方法可以做到这一点,你们应该非常擅长这一点。
  • “我只需要简单的发件人代码”,这不是 StackOverflow 的工作方式!你需要自己表现出一些努力。有很多关于 AJAX 的教程去寻找一些。我们不会教你 AJAX,它太宽泛了。一个重要提示:Jquery 库有一些很好的方法来帮助 AJAX,但它不是唯一的解决方案。

标签: javascript php html json


【解决方案1】:

您可以从客户端对服务器文件进行ajax调用,并可以使用get方法发送数据

// Using the core $.ajax() method
$.ajax({

    // The URL for the request
    url: "path of your php file",

    // The data to send (will be converted to a query string)
    data: {
        id: 123
    },

    // Whether this is a POST or GET request
    type: "GET",

    // The type of data we expect back
    dataType : "json",
})
  // Code to run if the request succeeds (is done);
  // The response is passed to the function
  .done(function( json ) {
     })
  // Code to run if the request fails; the raw request and
  // status codes are passed to the function
  .fail(function( xhr, status, errorThrown ) {
    alert( "Sorry, there was a problem!" );

  })
  // Code to run regardless of success or failure;
  .always(function( xhr, status ) {
    alert( "The request is complete!" );
  })

【讨论】:

  • 请注意,这需要 jQuery 作为依赖项...未提及
  • 实际上我已经几乎掌握了使用 json 从 php 位接收我的问题只是发送到 php 位。
【解决方案2】:

-_- 当简单的答案是这段代码时,每个人似乎都在尝试过度复杂化和过度思考。

function caller(){
myData = "myTbl";
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "bring.php?q="+myData,true); //sends myData to the php. You can change the GET to POST if ya want to be extra safe but either way, the php won't care anyways.
xmlhttp.send();
}

以上代码来自客户端服务器,将myData的数据发送到这个Server-side php。

<?php
$q = $_REQUEST['q']; //the receiver of the data. You can use explode() to separate them into pieces and turn it into a jigsaw puzzle if ya want.

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "Mydb";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} // how to connect is not important in my question but it is important for you to be able to connect to the database.

// now for the important stuff

$sql = "SELECT * FROM ".$q." "; // I had to extend it with a space because sometimes it's misunderstood.
$result = mysqli_query($conn, $sql) or die("Error in Selecting " . mysqli_error($conn));
$outp = array();

while($row=mysqli_fetch_assoc($result))
{
    $outp[] = $row;
}
    echo json_encode($outp); //sends the data gathered from the database table back to the client as a JSON file, and you are done.
?>

我花了 6 个小时的时间在网上冲浪和反复试验。

就像我说的;我是 JSON 的新手,所以很清楚我不懂 AJAX。就像,完全一样。

如果你认为我听起来像个白痴,我很抱歉,但让我们面对现实吧,几乎我们所有人在尝试学习编程时都曾是白痴。所以,我很惊讶为什么有些人在这里很粗鲁。谢谢。不知何故,我对他们也喜欢这里并不感到惊讶。让我的网络社交生活变得更无聊了。

所以下次,帮我一个忙,不要完全无礼,只要有问题就回答。

【讨论】:

  • 您知道,这里有一个基本的 AJAX 请求。 AJAX 存在一些有趣的跨浏览器问题,因此建议使用库来解决此问题。 Jquery 是一个流行的选项,但它不是唯一的选项。另见sitepoint.com/introduction-jquery-shorthand-ajax-methodssitepoint.com/use-jquerys-ajax-function
  • 实际上,我尝试对其进行研究,但不知何故我总是以一些致命的错误告终。也试过你发给我的链接(实际上在我发布这个问题之前)。就像我在问题中所说的那样,我总是以两个错误告终。我必须找出为什么它不适用于这些方法。这就是我问的原因。这只是我代码的一部分,因为我不得不使用更多的方法来完成它。我认为我的 WAMP 服务器有问题。如果我没有互联网连接,它甚至不会运行。 0_0 是的,我尝试了 Uni&Rei 方法。还是一样。
【解决方案3】:

您不能按原样通过 HTTP 传输对象。您需要将其转换为可以放入 HTTP-POST 请求正文的字符串:

try {
  var jsonString = JSON.stringify(anyJsonObject);
  //send it to the server
} catch(ex) {
  //handle error if anyJsonObject wasn't a valid JSON object. Remember: Not every JS object is a JSON object too.
}

相反的方式是:

try {
   var jsonObject = JSON.parse(anyJsonString);
} catch(ex) {
   //handle error if anyJsonString was malformed
}

【讨论】:

  • 我已经知道该怎么做,这不是我的问题的真正答案
  • 哦,我回答了我的问题。这将有助于清除您的 “您无法通过 HTTP 传输对象” 部分的想法。您可以使用$_REQUEST 和一些xmlhttp 帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-19
  • 1970-01-01
  • 2013-11-03
  • 2015-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多