2016-05-17 30 views
1

我已經花了數小時(也許幾天)在這個問題上。我知道這個問題以前已經問過,但答案總是如此模糊,以至於我的初學者經驗水平難以理解。我會喜歡一些特定和簡化的代碼示例。如何從頁面使用jQuery AJAX回調幾個變量

我正在向changeDate.php提交AJAX調用。

的index.html

$(document).on("click", "#day-left", function(event){ 
    changeDate = changeDate - 1; 

    $.ajax({ 
      type: "POST", 
      url: "changeDate.php", 
      data: { 
       amount: changeDate, 
       loginName: "benjamin_lawson" 
      }, 

      success: function(data) { 
      $("#date").html(data); 
      } 
     }); 
    }); 

本頁面收到Ajax。使用數據更新SQL,並創建24個變量($ hour1,$ hour2,$ hour3 ...)和數據。

changeDate.php

<?php 
$amount = $_POST['amount']; 
$user = $_POST['loginName']; 
//server information variables 

$dateName = date("mdY", strtotime("+" . $amount . " day")); 


$conn = new mysqli($servername, $username, $password, $dbname); 

for ($x = 1; $x <= 24; $x++) { 
    $sql = "SELECT `$dateName` FROM `$user` WHERE hour='$x'"; 
    $result = $conn->query($sql); 

    if ($result->num_rows > 0) { 
     while($row = $result->fetch_assoc()) { 
      ${"hour" . $x} = $row[$dateName]; 
     } 
    } 
    } 
//this creates 24 variables with all my information I want sent 
//through my call back. ($hour1, $hour2, $hour3,...) 

如何傳遞這些變量回到我的第一頁中,保持變量名和變量數據的回調?

我看到一個相關的問題這一點,他們回答:

相關的問題,並回答 ...潛在的解決方案

你可以用json_encode返回任意多個變量()。

嘗試在你的PHP:

<?php 
echo json_encode(array($num1, $num2)); 
?> 
You can add to that array , $num3, $num4, ... and so on. 

在你的JS,你可以按如下方法訪問每個號碼。首先,你需要這行代碼來解析編碼的JSON字符串,在你的成功函數中。

var result = $ .parseJSON(output);

將結果設置爲JSON對象。現在,您可以訪問>結果中的所有字段:

結果[0] - $ NUM1在PHP 結果[1] - 在PHP $ NUM2

我真的很感激,如果有人能告訴我在代碼中我需要做什麼來完成這項工作。非常感謝!

回答

0

好每一個答案,告訴使用JSON你的整個數據編碼的PHP。你還需要另一個答案,儘管這些問題已經存在。

那麼從PHP,你可以返回任何你想要的數據。你可以給一個字符串,或直接HTML或一些格式化的數據,如xml或JSON。

無論從該請求回顯/打印的是響應。您可以直接從URL或AJAX執行該請求。如果請求滿足先決條件,它將顯示相同的響應。

現在,如果你只是回顯任何數據,那麼JS沒有結構,可能你必須格式化和解析它才能從中提取有意義的數據。

但JSON和XML是已知的數據傳輸語言。 XML很好,但需要在客戶端基於服務器和基於元素的檢索進行構造(可能有許多我不知道的有效方法;因爲我不是XML的粉絲)。對於JSON,你在服務器端有編碼和解碼方法,而JavaScript就像它的哥哥。

現在你如何形成一個JSON?您只需將數組或對象傳遞給json_encode,它將返回JSON字符串。 echo該字符串和您的響應已準備就緒。

因此,我要使用@Poonam的代碼;我想提出一些優化也:

$amount = $_POST['amount']; 
$user = $_POST['loginName']; 

//server information variables 
$dateName = date("mdY", strtotime("+" . $amount . " day")); 

$conn = new mysqli($servername, $username, $password, $dbname); 

for ($x = 1; $x <= 24; $x++) { 

} 

// fill an array from 1 to 24 with steps of 1 
// http://php.net/manual/en/function.range.php 
$x = range(1, 24, 1); 

$sql = "SELECT `$dateName`, hour FROM `$user` WHERE hour IN ('". implode("', '", $x) ."')"; 
$result = $conn->query($sql); 
$response_arr = array(); 

if ($result->num_rows > 0) { 
    while($row = $result->fetch_assoc()) { 
     $response_arr['hour' . $row->hour] = $row[$dateName]; 
    } 
} 

echo json_encode($response_arr); 
exit(0); 
//this creates 24 variables with all my information I want sent 

而在AJAX的成功回調,使用JSON.parse()如果內容類型沒有application/json提及。

+0

非常感謝。這很容易遵循,像魅力一樣工作! –

0

這裏我使用json來編碼數據。

$.ajax({ 
     type:"POST", 
     async: false, 
     url:"finance/getdataq", 
     dataType: "json", 
     data: data,  
     success: function(data){ 
// you can access your data variables like data['ukeydt']; 
     $("."+targetval).find('.qrwordfol').html(data['ukeydt']); 
     $("."+targetval).find('img').attr('src',data['ukeyqr']); 
     $("."+targetval).show(); 
     return false; 
     }, 
     error: function (data) { 
      getd=""; 
     } 
    }); 

,並在我的PHP代碼

public function getdataq() 
    { 
     $data = array(); 
    $data['ukeydt'] = "this is first"; 
    $data['ukeyqr'] = "this is second"; 
    echo json_encode($data); 
    exit(); 

    } 
+0

感謝您的評論,但說實話,這仍然讓我困惑。你能告訴我一個非常簡單的例子嗎?使用我正在嘗試做的事情?導入簡單的變量名稱($ hour1,$ hour2),然後將它們用在我稱之爲AJAX的地方? –

+0

您需要將所有值存儲在數組中,然後您可以對此數組進行編碼並將其返回給您的jQuery ajax函數,然後您可以將它們訪問到jquery中。 – shubham715

0

你可以使用一個數組,將對小時內所有的值。

在changeDate中。PHP

$amount = $_POST['amount']; 
$user = $_POST['loginName']; 
//server information variables 

$dateName = date("mdY", strtotime("+" . $amount . " day")); 


$conn = new mysqli($servername, $username, $password, $dbname); 

for ($x = 1; $x <= 24; $x++) { 
    $sql = "SELECT `$dateName` FROM `$user` WHERE hour='$x'"; 
    $result = $conn->query($sql); 
    $response_arr = array(); 

    if ($result->num_rows > 0) { 
     while($row = $result->fetch_assoc()) { 
      $response_arr['hour' . $x] = $row[$dateName]; 
     } 
    } 
    } 


echo json_encode($response_arr); 
    exit(); 
    //this creates 24 variables with all my information I want sent 
    //through my call back. ($hour1, $hour2, $hour3,...) 

$response_arr將有$response_arr['hour1']...$response_arr['hour24'],你可以用你的success: function(data)

success: function(data) { 
     console.log(data); 
     } 

這陣你會得到data

+0

很好的答案,謝謝!所以我現在有我的數據作爲一個數組正確回顯到我的索引。你能向我解釋我現在可以如何使用這些數據並將它們分隔到hour1,hour2變量將它們放到索引頁上的變量中嗎? –

+0

'var hour1 = data ['hour1']; var hour2 = data ['hour2'];'等等。這將工作正常。 – Poonam

相關問題