如何从$ .post调用中获取数据?

时间:2015-06-24 11:16:57

标签: ajax

我在搜索数据库时不想刷新页面,例如。在帖子上,所以我帮助使用$.post调用来发送信息。我还没有使用过.done(function( data ){行。

我也遇到过这个问题,我不确定这是否与我的问题有关。

Return $.get data in a function using jQuery

我尝试搜索数据库,字符串匹配,并返回带有匹配字符串的行。但是我想在不刷新页面的情况下这样做,所以我认为我正在使用$ .post调用并使用由javascript(按钮)触发的.done(function( data ){

所以我有两个部分,即我所在的页面和一个单独的PHP页面,用于处理调用。

如何建立可以返回数据的桥?或者有更简单的方法吗?

2 个答案:

答案 0 :(得分:2)

方法.done(function(){})正是您想要使用的方法,但您也可以查看$.post函数的第三个参数(回调)。

在服务器端,执行所有查询并准备jsoned数组中的内容,如:

// set up data to send
$contentArray = [
    'content' => 'Some content',
    'foo' => 'bar',
];

$jsonResults = json_encode($contentArray);
// you can always send header('Content-Type: application/json'); instead of using simple die function.
die($jsonResults);

然后在客户端:

<div class="content-container"></div>
<script type="text/javascript">
    function someFunc() {
        (...)
        $.post(addr, values, function(res) {
            var response = $.parseJSON(res);

            $('.content-container').html(response.content);
        });
    }
</script>

这应该只更新.content-container类的内容。您可以根据需要发送,甚至准备好的视图也可以显示在容器中。这取决于你。

修改

可以肯定的是,您在某个按钮点击事件上正在调用someFunc(),对吧?如果没有,请按以下步骤操作:

<div class="content-container"></div>
<a href="someScript.php" class="callMe" data-content-id="1">Click here</a>
<script type="text/javascript">
    function changePageContent(addr, contentId) {
        $.post(addr, {contentId:contentId}, function(res) {
            var response = $.parseJSON(res);
            $('.content-container').html(response.content);
        });
    }

    $('.callMe').on('click', function() {
        changePageContent($(this).attr('href'), $(this).attr('data-content-id'));

        return false;
    });
</script>

<强> someScript.php:

<?php
    // you should force your script to allow only XML HTTP request here
    if(empty($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
        die('AJAX requests only..');
    }

    // always remember to escape somehow your post values before you use them
    $contentId = is_numeric($_POST['contentId']) ? intval($_POST['contentId']) : null;

    if (null == $contentId) (...) // throw exception or return status=false

    // do your mysql query like: "SELECT * FROM content WHERE id=".$contentId;

    // well, it would be better to send headers instead of that
    die(json_encode([
        'status' => true, // this is a good practice to send some info, if everything is fine, if mysql row has been found etc..
        'result' => $result, // mysql row, this is just in case you need other values to display
        'content' => $result['content'], // I assume you have 'content' column in your mysql
    ]));
?>

答案 1 :(得分:2)

看一下Ajax的docs,确实有很多信息可以提供帮助。

简而言之,您可以这样做:

  function myPost() {
      // Set the data 
      var data = {
        'key'   : 'value',
        'key_2' : 'value_2' 
      };
      // Do the post
      $.post( '/your-url/', data, callBack );
  }

  function callBack( data ) {
      // If the $.post was successful
      success: function( data ) {
          // do stuff
          console.log( data ); // returned from your endpoint
      },
      // If there was an error
      error: function( jqXHR, textStatus ) {
          // do stuff
          console.log( "Request failed: " + textStatus );
      }
  }

  // On click of your element, fire the post request
  $('#element').on('click', function() {
      myPost();
  });