2016-05-31 99 views
0

我不确定我做了什么错误,但我有一个PHP函数,我需要从中检索一些数据。使用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); 
} 
?> 

然而,当我点击按钮执行代码我看到控制台日志结果是未定义的。

这是为什么?

UPDATE

迈克的评论后,波纹管,我意识到,它实际上执行的控制台日志中的错误状态。

所以它的失败的地方,我不知道为什么

+1

哪个'console.log'行是被执行的行? – Mike

+0

呵呵,我看到它正在执行的错误控制台日志 – Trent

+0

你看过浏览器开发工具中的AJAX请求/响应吗?你有没有在项目中包含jQuery库?是否有任何错误报告?你在网络服务器上运行这个吗? –

回答

-1

试试这个:

$(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); 
     } 
     }); 
    }); 
}); 
+1

*为什么*他应该“试试这个”? – Mike

0

是U确保AJAX调用能够达到PHP函数?

尝试这个 在PHP文件执行此第一

这将产生BASE_URL()类似笨或任何其它相对框架。

base_url in codeigniter

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 URL提取。

+0

这只是一个猜测,脚本的URL是错误的,但你不知道这是否是这种情况。此外,这是一个可怕的方式来做到这一点。首先,你迫使协议是'http'。如果它是“https”呢?其次,你不需要回显服务器名称。以'/'开头的URL将自动与Web根目录相关。第三,如果请求URI与'/子目录/ script.php'类似,你的代码会尝试加载'http:// example.com/subdirectory/script.phpscripts/functions.php',这几乎肯定是错误的。 – Mike

+0

1>这可以轻松转换为https n http。2>是的,当然这是一个猜测,因为OP无法提供关于错误的决定性事实,无论是500,404,403,所以是的,这仅仅是帮助某人的卑微尝试。 3>这正在考虑一个特定的测试案例,我们不知道具有确定性的详细信息。 –

0

正如从the manual看到:

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

第一个参数是一个jqXHR对象。

另外,从here

对于使用XMLHttpRequest向后兼容,一个jqXHR对象将暴露下面的属性和方法:

  • readyState的
  • 状态
  • 状态文本responseXML的和/或responseText当基础请求 用xml和/或text分别回应时setRequestHeader(name, 值),其从标准通过用 替换旧值的新的,而不是串联的新值,以旧
  • getAllResponseHeaders()
  • getResponseHeader()
  • 的StatusCode()
  • 中止起飞()

因此,大家可以看到,有没有jqXHR.message财产。所以,当你这样做:

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

,你会因为属性不存在获取未定义的通知。

this answer,得到错误信息,你需要做的:

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

对我的作品与jQuery 1.12.3

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

//显示 “测试,通过了”

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

0

看来这个错误与json_encode函数有关。

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

感谢大家的帮助,虽然不胜感激