簡體   English   中英

使用jQuery通過Ajax將數據從javascript發送到php。 如何查看回來的數據?

[英]Sending data from javascript to php using via Ajax using jQuery. How to view the data back?

我知道這個問題從早上開始就一直被問到很多,但是我只是想不到代碼中發生了什么。

我有一個index.php(這是我的網站),該網站使用表單從用戶那里接收信息,然后分別調用一個javascript文件,然后依次調用另一個后端php文件(該后端php文件使用mysql查詢數據庫並執行某些操作) 。

問題是我不確定什么信息會從我的js傳遞到后端php。 我剛剛學習了jQuery和Ajax,所以我真的不知道我犯的那個小錯誤是什么。

根據我的理解,后端php會執行其工作,並將該值傳遞給javascript以在網頁上顯示。 但是我的數據沒有被發送/顯示。 我收到錯誤500內部服務器錯誤。

以下是當前存在問題的代碼段:

Javascript:

var data1 = {week:week, group:grp_name};

$.ajax({
    dataType: "json",
    type: "POST",
    url : "php/remindUsers.php",
    success : function(response){
                alert ("success !");
            },
    error : function(response){
           console.log(response);
           alert("fail!");
     }

   })
});

PHP后端(remindUsers.php):

<?php

if (isset($_POST['week'])) {
   $week = $_POST['week'];
}

if (isset($_POST['group'])) {
  $group_name = $_POST['group'];
}

  echo $week;
?>

我省略了sql代碼段,因為它們可以正常工作。

編輯:現在我的狀態碼是200,響應文本也可以。 我的響應文本在預期的實際響應文本旁邊顯示一個奇怪的“輸入”符號。這正常嗎?並且它仍然進入錯誤塊,而不是代碼成功塊。

通過json的PHP響應中不能包含這些標簽<body>,...

它只能是:

<?php
 $week = $_POST("data");
 $json =  json_decode($week);
 echo json_encode($json);
?>

刪除評論

//數據:{week:week}

並設置具有有效值的可變周:

數據:{week:week}

所以:

$.ajax({
dataType: "json",
type: "POST",
url : "php/remindUsers.php",
data : {week :week} ,
success : function(response){
            console.log(response);
        },

為了看看響應的形狀是什么。

我無法完全回答您的問題,因為我需要更多有關運行情況的調試信息,但是關於您的代碼有2-3件事使我感到有些困惑,這可能會解決您的錯誤。

首先,在您的后端中使用isset,如下所示:

if (isset($_GET['your_input_name'])) {
    $someData = $_GET['your_input_name'];
}

isset部分在這里非常重要。 進行設置,然后重試。 如果您不再遇到500錯誤。 這可能是因為您的數據從未發送到您的后端,或者是因為您沒有檢查良好的輸入名稱。

其次,關於輸入名稱。 我可以在您發送的代碼中看到:

var data1 = {week:week, group:grp_name};

因此,在您的后端中,應使用像這樣的值的名稱來檢索數據:

$week = $_POST("week");

第三,我不是json專業人士,但也許您的json無效。 即使他沒事,我還是建議您像這樣建造一個“清潔工”:

var data = [
        { 'name' : 'week', 'value' : week}
    ]; 

最后,如果您使用表單將數據發送到php,則可以使用類似的方法:

 var myForm = $("#myForm").serializeArray();

 $.ajax({
  url: 'yourUrl',
  type: "GET",
  data: myForm,
  dataType: 'json', 
  success: function(res){
      //your success code

  },
  error: function(){
    //your error code
  }
});

我希望這有幫助。

用這個

的PHP

   $week = $_POST['data'];
    $json = json_encode($week);
    echo $json;

JS

 $.ajax({
        dataType: "json",
        type: "POST",
       url : "php/remindUsers.php"
        //data : {week :week} ,
        data:  {data:{week:'week', group:'grp_name'}} ,
        success : function(response){
            alert ("success !");
        },
        error : function(response){
            alert("fail!");
        }

    })

您做錯了幾件事。 首先,您不想在將數據發送到服務器之前對數據進行字符串化處理。 您要發送JSON,因此您的注釋行是正確的行。 PHP也有問題。 發送到服務器的數據如下所示:

{week: "Something"}

因此,在您的PHP中,您想訪問如下數據:

$_POST["week"];

我會說將php包裝在一個函數中並回顯json。 檢查是否有POST數據,如果沒有返回錯誤消息,這也很好。 這沒有經過測試,但是希望會指出正確的方向。

 <?php

 function getJSON() {

     if (isset($_POST["data"] && !empty($_POST['data'])  ) {
         $week = $_POST["data"];
         $json =  json_decode($week);
         echo $json;
     } else {
         echo "There was a problem returning your data";
     }
 } 

 getJSON();

 ?>

實際上,在撰寫本文時,我意識到您可以在AJAX POST中嘗試這些標頭:

accepts: 'application/json',
contentType: 'application/json',
dataType: 'json'

希望能有所幫助。

有效。 由於有了另一個SO帖子,我找到了答案。

TIL:即使服務器響應正常,也會觸發錯誤情況,因為從php返回到javascript的數據不是json,因為我在ajax請求中明確提到了dataType:“ json”

鏈接在這里:

Ajax請求返回200 OK,但是會引發錯誤事件而不是成功

感謝大家的幫助和指導我正確的方向。 干杯!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM