无法使用jQuery.post检索数据

时间:2009-04-16 12:52:08

标签: php javascript jquery

我正在尝试使用jQuery.post()函数来检索一些数据。但 我没有输出。

我有一个显示表格的HTML。单击此表应触发jQuery.post事件。

我的脚本文件如下所示:

jQuery(document).ready(function() { 

  jQuery('#storeListTable tr').click(function() { 
    var storeID = this.cells[0].innerHTML; //This gets me the rowID for the DB call.

    jQuery.post("../functions.php", { storeID: "storeID" }, 
      function(data){ 
         alert(data.name); // To test if I get any output 
      }, "json"); 
    }); 
});  

我的PHP文件如下所示:

<?php 
  inlcude_once('dal.php'); 

  //Get store data, and ouput it as JSON. 
  function getStoreInformation($storeID) 
  {
    $storeID = "9";//$_GET["storeID"]; 
    $sl = new storeLocator(); 
    $result = $sl->getStoreData($storeID); 

    while ($row = mysql_fetch_assoc($result)) { 
    { 
        $arr[] = $row; 
    } 
    $storeData = json_encode($arr); 
    echo $storeData;  //Output JSON data 
  } 
?> 

我测试了PHP文件,它以JSON格式输出数据。我现在唯一的问题是将这些数据返回给我的javascript。

  1. 由于javascript位于/ js /文件夹中,使用'../'来调用php文件是否正确
  2. 我认为我没有正确传递storeID参数。什么是正确的方式?
  3. 如何调用getStoreInformation($ storeID)函数并传递参数? jQuery.com上的jQuery示例包含以下行:$ .post(“test.php”,{func:“getNameAndTime”} getNameAndTime是test.php中函数的名称吗?

  4. 我更进了一步。 我已将代码从函数()内部移到外部。所以现在php代码在文件执行时运行。

    我的js脚本现在看起来像这样:

      jQuery('#storeListTable tr').click(function() {
        var storeID = this.cells[0].innerHTML;
    
        jQuery.post("get_storeData.php", { sID: storeID },
          function(data){
             alert(data);
          }, "text");
        });
    

    这会生成一个警报窗口,将存储数据输出为JSON格式的字符串。 (因为我已将“json”改为“text”)。

    JSON字符串如下所示:

    [{"id":"9","name":"Brandstad Byporten","street1":"Jernbanetorget","street2":null,"zipcode":"0154","city":"Oslo","phone":"23362011","fax":"22178889","www":"http:\/\/www.brandstad.no","email":"bs.byporten@brandstad.no","opening_hours":"Man-Fre 10-21, L","active":"pending"}]
    

    现在,我真正想要的是从JSON输出数据。 所以我会将“text”更改为“json”,将“alert(data)”更改为“alert(data.name)”。 所以现在我的js脚本将如下所示:

      jQuery('#storeListTable tr').click(function() {
        var storeID = this.cells[0].innerHTML;
    
        jQuery.post("get_storeData.php", { sID: storeID },
          function(data){
             alert(data.name);
          }, "json");
        });
    

    不幸的是,我得到的唯一输出是“Undefined”。 如果我改变“alert(data.name);” “alert(data);”,输出为“[object Object]”。

    1. 那么如何输出商店的名称?

    2. 在PHP文件中,我尝试设置$ storeID = $ _GET [“sID”];但我不认为这个价值。如何在jQuery.post中获取作为参数传递的值? (目前我已经硬编码了storeID,用于测试)

4 个答案:

答案 0 :(得分:6)

丢失“storeID”周围的引号:

错:

jQuery.post("../functions.php", { storeID: "storeID" }

右:

jQuery.post("../functions.php", { storeID: storeID }

答案 1 :(得分:6)

bartclaeys是正确的。就像现在一样,您实际上是将字符串“storeID”作为商店ID传递。

然而,还有几个笔记:

  • 您将设置storeID: storeID似乎很奇怪 - 为什么只有第二个被评估?当我第一次开始时,每次我不发送“1:1”或其他东西时我都要三重检查。但是,当您使用这样的对象表示法时,不会评估键,因此只有第二个键才是实际的变量值。
  • 不,您正在考虑将PHP文件作为../来考虑JS文件的位置是不正确的。您必须在加载此javascript的任何页面上调用它。因此,如果页面实际上与您调用的PHP文件位于同一目录中,则可能需要将其修复为指向正确的位置。
  • 与以前的观点挂钩,你真的希望得到Firebug。这将允许您在发送AJAX请求时,如果它们成功发出,发送给它们的数据以及正在发回的数据,则会看到它们。简而言之,它是选择调试Javascript / AJAX应用程序的共识工具,你应该拥有它,使用它,并且如果你不想浪费另外6天来调试一个愚蠢的错误,那就应该珍惜它。 :)

编辑就你的回复而言,如果你打破了你要归还的内容:

[
  {
    "id":"9",
    "name":"Brandstad Byporten",
    "street1":"Jernbanetorget",
    "street2":null,
    "zipcode":"0154",
    "city":"Oslo",
    "phone":"23362011",
    "fax":"22178889",
    "www":"http:\\/www.brandstad.no",
    "email":"bs.byporten@brandstad.no",
    "opening_hours":"Man-Fre 10-21, L",
    "active":"pending"
  }
]

这实际上是一个包含单个对象(花括号)的数组(方括号)。

所以当你尝试做的时候:

alert(data.name);

这是不正确的,因为该对象作为数组的第一个元素。

alert(data[0].name);

应该按预期工作。

答案 2 :(得分:1)

您的JSON作为javascript数组返回... []包裹卷曲位[{}]

所以这样可行。

wrong:  alert(data.name);
right:  alert(data[0].name);

希望有所帮助。 d

答案 3 :(得分:0)

好的,多亏了Darryl,我找到了答案。

所以这里是任何想知道这一点的人的功能代码:

javascript文件

jQuery(document).ready(function() {

  jQuery('#storeListTable tr').click(function() {

    jQuery.post("get_storeData.php", { storeID: this.cells[0].innerHTML },     // this.cells[0].innerHTML is the content ofthe first cell in selected table row
      function(data){
         alert(data[0].name);
      }, "json");
    });

});

<强> get_storeData.php

<?php
  include_once('dal.php');

  $storeID = $_POST['storeID'];   //Get storeID from jQuery.post parameter

  $sl = new storeLocator();
  $result = $sl->getStoreData($storeID);  //returns dataset from MySQL (SELECT * from MyTale)

  while ($row = mysql_fetch_array($result))
  {
    $data[] = array( 
    "id"=>($row['id']) ,
    "name"=>($row['name']));
  }  

  $storeData = json_encode($data);

  echo $storeData;
?>

感谢你们的帮助!