繁体   English   中英

使用JQuery从PHP检索数据

[英]Retrieve Data From PHP using JQuery

我不确定我做错了什么,但我有一个PHP函数需要从中检索一些数据。

我正在使用JQuery 1.11执行ajax函数

$(document).ready(function() {
   $('#butt_example').on('click', function() {
      $.ajax({
         url      : 'scripts/functions.php',
         type     : 'GET',
         dataType : 'json',
         data     : {
            'action': 'test'
         },
         success: function(result) {
            var la_result = JSON.parse(result);
            console.log(la_result);
         },
         error: function(log) {
            console.log(log.message);
         }
      });
   });
});

然后我用一个简单的php函数替换了它,仅用于测试

<?php
if(isset($_GET["action"])) {
   $arr = array();
   $arr[0] = "test";
   $arr[1] = "passed";

   header('Content-Type: application/json; charset=utf-8');
   echo json_encode($arr);
}
?>

但是,当我单击按钮执行代码时,我看到控制台日志结果未定义。

为什么是这样?

更新

在Mike发表评论之后,我意识到它实际上是在错误情况下执行控制台日志。

所以它在某处失败了,我不确定为什么

您确定AJAX调用能够到达PHP函数吗?

尝试此操作。在.php文件中首先执行此操作

这将产生类似于codeigniter或任何其他相对框架的base_url()。

codeigniter中的base_url

function url(){
  return sprintf(
    "%s://%s%s",
    isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http',
    $_SERVER['SERVER_NAME'],
    $_SERVER['REQUEST_URI']
  );
}

<script>
  var url="<?php echo url(); ?>"; 
</script>

然后在您的JS文件中提供URL

 $(document).ready(function() {
       $('#butt_example').on('click', function() {
          $.ajax({
             url      : url+'scripts/functions.php',
             type     : 'GET',
             dataType : 'json',
             data     : {
                'action': 'test'
             },
             success: function(result) {
                var la_result = JSON.parse(result);
                console.log(la_result);
             },
             error: function(log) {
                console.log(log.message);
             }
          });
       });
    });

如前所述,为http和https修改的网址提取。

正如您从手册中看到

错误
类型:函数(jqXHR jqXHR,字符串textStatus,字符串errorThrown)

第一个参数是jqXHR对象。

同样从这里

为了与XMLHttpRequest向后兼容,一个jqXHR对象将公开以下属性和方法:

  • readyState
  • 状态
  • 当基础请求分别以xml和/或文本作为响应时,statusText responseXML和/或responseText分别为setRequestHeader(name,value),该请求通过使用新值替换旧值而不是将新值连接到旧值而偏离标准
  • getAllResponseHeaders()
  • getResponseHeader()
  • statusCode()
  • abort()

如您所见,没有jqXHR.message属性。 因此,当您这样做时:

     error: function(log) {
        console.log(log.message);
     }

当然,您将收到未定义的通知,因为该属性不存在。

从此答案中 ,要获取错误消息,您需要执行以下操作:

error: function(xhr, status, error) {
  var err = eval("(" + xhr.responseText + ")");
  alert(err.Message);
}

适用于我与jQuery 1.12.3

success: function(result) {
        alert(result);
},

//显示“测试通过”

控制台日志中返回下一行JSON:JSON.parse:JSON数据的第1行第1行出现意外的关键字

似乎错误与json_encode函数有关。

CentOS 5 php安装不包括json.so模块,因此必须手动安装它,然后才能修复错误。

感谢大家的帮助,对此深表感谢

尝试这个:

$(document).ready(function() {
   $('#butt_example').on('click', function() {
      $.ajax({
         url      : 'scripts/functions.php',
         type     : 'GET',
         dataType : 'json',
         data     : 'action=test',
         success: function(result) {
            var la_result = JSON.parse(result);
            console.log(la_result);
         },
         error: function(log) {
            console.log(log.message);
         }
      });
   });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM