2016-05-17 32 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

相关问题