如何处理来自php的json响应?

时间:2013-03-25 20:18:37

标签: php ajax jquery

我发送一个更新数据库记录的ajax请求,它使用html表单测试它,它的工作正常,但是当我尝试发送ajax请求时它的工作,但我收到的响应总是为空。如何在html表单上显示正确的响应。我在Windows操作系统上使用xampp。请指引我正确的方向。

<?php
    header('Content-type: application/json');
    $prov= $_POST['prov'];
    $dsn = 'mysql:dbname=db;host=localhost';
    $myPDO = new PDO($dsn, 'admin', '1234');

    $selectSql = "SELECT abcd FROM xyz WHERE prov='".mysql_real_escape_string($prov)."'";
    $selectResult = $myPDO->query($selectSql);

    $row = $selectResult->fetch();
    $incr=intval($row['votecount'])+1;

    $updateSql = "UPDATE vote SET lmno='".$incr."' WHERE prov='".mysql_real_escape_string($prov)."'";
    $updateResult = $myPDO->query($updateSql);

    if($updateResult !== False) 
    {
    echo json_encode("Done!");
    } 
    else 
    {
    echo json_encode("Try Again!");
    }
    ?>




function increase(id)
    {
         $.ajax({
            type: 'POST',
            url: 'test.php',
            data: { prov: id },
            success: function (response) {

            },
            complete: function (response) {
                var obj = jQuery.parseJSON(response);
                alert(obj);
            }
        });
    };

2 个答案:

答案 0 :(得分:1)

$.ajax({
            type: 'POST',
            url: 'test.php',
            data: { prov: id },
            dataType: 'json',
            success: function (response) {
                // you should recieve your responce data here
                var obj = jQuery.parseJSON(response);
                alert(obj);
            },
            complete: function (response) {
                //complete() is called always when the request is complete, no matter the outcome so you should avoid to recieve data in this function
                var obj = jQuery.parseJSON(response.responseText);
                alert(obj);
            }
        });

completesuccess函数会传入不同的数据。success只获取数据,完成整个XMLHttpRequest

答案 1 :(得分:0)

首先,在你的ajax请求中,你需要将dataType设置为json以确保jQuery知道它正在接收json。

其次,complete未传递来自ajax请求的数据,只有success

以下是我放在一起的完整工作示例,我知道有效:

test.php (在网络浏览器中调用此页面)

<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
  // Define the javascript function
  function increase(id) {
    var post_data = {
      'prov': id
    }

    $.ajax({
      'type': 'POST',
      'url': 'ajax.php',
      'data': post_data,
      'dataType': 'json',
      'success': function (response, status, jQueryXmlHttpRequest) {
        alert('success called for ID ' + id + ', here is the response:');
        alert(response);
      },
      'complete': function(jQueryXmlHttpRequest, status) {
        alert('complete called');
      }
    });
  }

  // Call the function
  increase(1); // Simulate an id which exists
  increase(2); // Simulate an id which doesn't exist
</script>

ajax.php

<?php
$id = $_REQUEST['prov'];

if($id == '1') { 
  $response = 'Done!';
} else {
  $response = 'Try again!';
}

print json_encode($response);