Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何构造jQueryAjax以灵活地处理输入和输出?_Javascript_Php_Jquery_Mysql_Ajax - Fatal编程技术网

Javascript 如何构造jQueryAjax以灵活地处理输入和输出?

Javascript 如何构造jQueryAjax以灵活地处理输入和输出?,javascript,php,jquery,mysql,ajax,Javascript,Php,Jquery,Mysql,Ajax,我有一个单页结构的网站。我正在尝试使用Ajax根据用户需求更新数据。 我正试图找出如何构造ajax代码,以便它能够灵活地处理输入和输出=我希望根据单击的链接运行不同的函数,并希望将正确的输出返回到正确的div。 HTML链接: <a href="#page-a" class="dbLink" data-variable="funcA"> <a href="#page-b" class="dbLink" data-variable="funcB"> <div id=

我有一个单页结构的网站。我正在尝试使用Ajax根据用户需求更新数据。 我正试图找出如何构造ajax代码,以便它能够灵活地处理输入和输出=我希望根据单击的链接运行不同的函数,并希望将正确的输出返回到正确的div。 HTML链接:

<a href="#page-a" class="dbLink" data-variable="funcA">
<a href="#page-b" class="dbLink" data-variable="funcB">

<div id="page-a">
    <div id="a-result"></div>
</div>

<div id="page-b">
    <div id="b-result"></div>
</div>
functions.php:

include 'dbconnect.php';

function funcA($mysqli){
   $result = $mysqli->query("select * from database");
   $row = mysqli_fetch_assoc($result);
   echo $row['column'];
}

function funcB($mysqli){
   $result = $mysqli->query("select * from database2");
   $row = mysqli_fetch_assoc($result);
   return $row['column'];
}

if (isset($_POST['action'])) {
   $resp = null;
   switch($_POST['action']) {
    case "funcA":
        $resp->data = funcA($mysqli);
        $resp->target = "#page-a";
        break;
    case "funcB":
        $resp->data = funcB($mysqli);
        $resp->target = "#page-b";
        break;
    default:
        break;
  }
  echo json_encode($resp);
}

将另一个data-*变量集添加到要输出数据的位置的id。要控制返回数据的格式,请在ajax选项中提供dataType选项,当然还要确保指向的url实际输出该类型的数据。dataType它将告诉jQuery如何解析传入的数据

var theContainer = $(this).attr("data-container");
...
dataType:"json" //or text, or xml etc etc
success: function(data){
   //if data is upposed to be json
   //and datType is set to json
   //data will be an object, same with xml
   //process data how you need to
   $("#"+theContainer).html(whateverYouHaveDone);
}
如果需要在php脚本中控制返回数据的目标,那么将返回的数据转换为json,并将目标选择器发送给它

$resp = new stdClass;
switch($_POST['action']) {
   case "funcA":
      $resp->data = funcA($mysqli);
      $resp->target = "#someContainer";
      break;
   case "funcB":
      $resp->data = funcB($mysqli);
      $resp->target = "#someContainer";
      break;
   default:
      break;
}

echo json_encode($resp);
那么在你的ajax成功中

success: function(resp){
    if(resp.data){
       $(resp.target).html(resp.data);
    }
}
当然还要设置数据类型:json

要仅返回mysql行,请执行与上面相同的操作,但在ajax中,success resp.data将是一个对象。因此,只需使用行的列名访问resp.data的属性即可

success: function(resp){
    if(resp.data){
       //if say you have a column named "username"
       var username = resp.data.username;
    }
}

有很多方法可以做到这一点。 我看您已经理解了自定义数据-*属性。我想再添加一个属性:数据目标=

<a href="#page-a" class="dbLink" data-variable="funcA" data-target="a-result">
<a href="#page-b" class="dbLink" data-variable="funcB" data-target="b-result">

<div id="page-a">
    <div class="a-result"></div>
</div>

<div id="page-b">
    <div class="b-result"></div>
</div>
如果你想玩一个真实的例子,我前阵子为stack overflow上的另一个人做了一把小提琴:


在左边的框中输入一个数字,如5006,这是邮政编码。然后,目标是右侧输入框中的邮政地址。这个概念与您所追求的非常相似,有数据目标。

但是如何将$target控制为我在functions.php中运行的任何对象?我的意思是目标取决于request@MacLuc对不起,我不知道你的意思。我的示例将把functions.php的输出添加到单击链接的href属性中链接的任何div中,以便functionB输出到divpage-b@MacLuc哦,你的意思是你不想只在div中显示结果?也许在列表中显示FunctionA的结果,在表中显示functionB的结果?这就是你的意思吗?啊,我明白了,错过了那部分!那就是我想要的。你能给我一些关于如何将一整行从我的php传递到jquery的提示吗。现在我只回显您所看到的结果。@MacLuc您有两个选项-您可以在php中构建html,然后使用上面的.htmldata将其放入带有jQuery的div中,或者您可以在php中构建一个数组/stdclass,并对其进行json_编码,以便jQuery可以访问属性。如果您只想输出html,第一个选项是我看到的easiestaha。假设我将在php请求中选择整行,如何将其传递回ajax,以便jquery理解它?非常好!这很有道理。当然,将返回作为json对象处理。我现在就要试一试!谢谢你!啊哈,json数据的选择非常好。我的div中似乎没有任何输出。你有时间看看我更新的代码吗?$row['column';列是行的实际列名吗?
success: function(resp){
    if(resp.data){
       //if say you have a column named "username"
       var username = resp.data.username;
    }
}
<a href="#page-a" class="dbLink" data-variable="funcA" data-target="a-result">
<a href="#page-b" class="dbLink" data-variable="funcB" data-target="b-result">

<div id="page-a">
    <div class="a-result"></div>
</div>

<div id="page-b">
    <div class="b-result"></div>
</div>
$(document).on("click", ".dbLink", function(e) {
    e.preventDefault();
    var theAction = $(this).attr("data-variable");
    var theTarget = $( this ).attr("data-target");

    $.ajax({
        url: 'ini/functions.php',
        data: { action: theAction },
        type: 'post',
        success: function(){
          /* Here you have to change the data[] to match the JSON return from your PHP-script. You can of course do it without JSON, but I would use http://www.php.net/manual/en/function.json-encode.php on an array from PHP.*/
          $("input[class="+ theTarget +"]").html( data["foo"][0]["bar"] );
        }
    });
});