js:
 $.get("?act=insert", {"ame":name, "idcard":idcard, "companyid":<?php echo $id;?>, "time":tsTimeStamp},
                                success:function(data){
                                    alert(data["result"]);
                            });php:if($act == 'insert'){
    echo JSON(array('result' => 'ok'));
}
alert出来的结果:undefined
ps: debug时,data的内容是html源码, 在最后一行是 {'result' : 'ok'}我就想取得这个result的值,请大神们指点一下,感激^^

解决方案 »

  1.   

    加上数据类型试试
    $.get("?act=insert", {"ame":name, "idcard":idcard, "companyid":<?php echo $id;?>, "time":tsTimeStamp},
                                    success:function(data){
                                        alert(data["result"]);
                                },'json');
      

  2.   


    我之前加过'json', 就不走后台了, 更走不到alert部分了
      

  3.   

    alert(data);的结果如上图,前面是html源码,最后一行是我要的结果,怎么才能取得最后的数据呢。。
      

  4.   

    php文件里的JSON函数是封装好的吗?常用的json_encode
    还有{"ame":name,......这里是故意写成ame的?
      

  5.   

    $.get() 不会对返回的 json 数据进行解码
    $.post() 加 ‘json’ 参数会
    他们都是 $.ajax 方法的简写形式,自然不会面面俱到
    你也可以用 $.getJSON() 按 GET 方式获取 json
      

  6.   


    我这些代码都写在同一个php文件中,而且还有其他的$.get()方法也是这么写的,都没有问题,唯独这个方法出了问题,
    刚做js,不是很明白其中的原理, ame应该是name,拷代码时拷错了,在php后台有对数据转码
    $name = iconv('UTF-8', 'GBK', $name);
      

  7.   


    用了$.getJSON() 方法也是没有提交到后台,走不进回调函数
      

  8.   

    alert(data) 出现 html 代码,就表示你的php程序输出了不该输出的东西
    你自己不去检查一下吗?
      

  9.   


    if($act == 'insert'){
        echo JSON(array('result' => 'ok'));
    }php里就输出了这个,debug时 json中也是{'result':'no'}
    但是到前台就变成前面是html代码了,就是检查不到原因才来这里请问大家的
      

  10.   

    浏览器直接带 ?act=insert 访问你的页面,看看返回的属什么!
    注意要在查看网页源代码中看
      

  11.   


    就是$.get()方法返回的data的html代码。。
      

  12.   

    打开浏览器开发者工具,查看下?act=insert 响应的是什么数据
      

  13.   

    我曹、你们找bug 的能力好强,
      

  14.   


    响应的数据同返回的data数据,我不太理解里面的原理,求解答^^
      

  15.   

    多谢各位的解答哦,可是我还是不太理解其中的含义,用了$.get()请求,php返回的明明是JSON格式数据,到前台就变成页面的html源码
    $.get()中设置JSON类型的话,就无法提交到后台,但不报错
    用$.getJSON()请求也一样
    我试过$.get, $.getJSON , $.ajax, $.post。还是没有解决问题,哪位大侠指导下呀。。
      

  16.   

    在客户端修改当然不能解决问题,问题要解决在源头!
    你的将要返回 json 的 php 程序,是不能输出任何其他内容的
      

  17.   


    下面是我的php程序的所有代码,只有简单的查询和更新DB操作,除了返回值没有输出啊
    返回值部分也用了几种写法,全部不好用if ($act == 'insert'){
        InitGP(array('name', 'companyid', 'idcard'));
        $timeadd = time() - 86400*60;    if(!empty($name)){
            $name = iconv('UTF-8', 'GBK', $name);
            $whereTmp = " and r.fullname = '$name' ";
        }
        if(!empty($idcard)){
            $whereTmp .= " and minfo.identityCard = '$idcard' ";
        }    $sql = "SELECT  语句";
        $msInfo = $db->getone($sql);
        if($msInfo){
            $db->query("update table set value = 1 where id = ".$msInfo['id']. " limit 1");
            //echo JSON(array('result' => 'ok'));
    echo "ok";
        }else{
            //print_r($_GET['jsoncallback'].'('.json_encode(array("result"=>'no')).')');
            //print_r(json_encode(array('result' => 'no')));//
            //echo JSON(array('result'=>'no'));
            //echo "no";
        }    exit;
    }
      

  18.   

    你有 echo "ok";
    显然字符串 ok 不是 json,jq 因解析不了而转到 error 回调
      

  19.   

    我是分别用了下面四种写法都不行
    //print_r($_GET['jsoncallback'].'('.json_encode(array("result"=>'no')).')');
    //print_r(json_encode(array('result' => 'no')));
     //echo JSON(array('result'=>'no'));
     //echo "no";
      

  20.   

    不是都跟你说了吗?要按 json 解析,就一定要输出 json 格式串!假定你的程序文件名为 test.php
    则 echo file_get_contents('http://localhost/test.php?act=insert ');
    贴出结果,看看都有什么
      

  21.   


    我建议你可以参考我的本篇博客: AJAX数据格式之HTML关于使用JQuery将HTML数据格式编写出来的代码,可以参见如下所示:<%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>AJAX--对是否已存在姓名进行测试</title><!-- 
    1、导入JQuery库
    2、获取name="username"的节点: username
    3、为username添加change响应函数
    3.1、获取username的value属性值,去除前后空格且不为空。准备发送Ajax请求。
    3.2、发送Ajax,请求检验username是否可用。
    3.3、在服务端直接返回一个html的片段:<font color="red">该用户已经被使用</font>
    3.4、在客户端浏览器把其直接添加到#message的html中。

     --><script type="text/javascript" src="${pageContext.request.contextPath}/scripts/jquery-3.2.1.js"></script>
    <script type="text/javascript">

    $(function() {
    $(":input[name='username']").change(function() {
    var val = $(this).val();
    val = $.trim(val);

    if (val != "") {
    var url = "${pageContext.request.contextPath}/valiateUserName";
    //var url = "${pageContext.request.contextPath}/ValiateUserNameServlet";
    var args = {"username":val, "time": new Date()};

    $.post(url, args, function(data) {
    $('#message').html(data);     // $().html()函数
    });
    }

    });
    });

    </script></head>
    <body>

    <form action="" method="post">

    UserName:<input type="text" name="username" />
    <br />
    <dir id="message"></dir>
    <br />
    <input type="submit" value="Submit" />

    </form>

    </body>
    </html>关于以上代码中所运用到的Java类如下所示:package com.atguigu.ajax.app.servlets;import java.io.IOException;
    import java.util.Arrays;
    import java.util.List;import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    public class ValiateUserNameServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {

    List<String> userNames = Arrays.asList("AAA", "BBB", "CCC");

    String userName = request.getParameter("username");
    String result = null;
    if(userNames.contains(userName)) {
    result = "<font color='red'>该用户名已经被使用</font>";
    }else {
    result = "<font color='green'>该用户可以使用</font>"; 
    }

    response.setContentType("text/html");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().print(result);
    }



    }-----------------------------------------------------------------------------------------
    -----------------------------------------------------------------------------------------
    我建议楼主可以下载一份JQuery的API,jquery.api.3.2.1.chm这份API中对你所疑问$.get()、$.post()、$().html、$().html等方法,讲解的很清楚。如果你想要这份jquery.api.3.2.1.chm文档,可以发私信,将你邮箱给我,我通过邮箱发送给你。
      

  22.   

    多谢各位抽出宝贵的时间来解答和建议,各种办法都试过,还是不行,也只会简单的调试,深层次的不太明白我的html代码和php程序写在了同一个php文件中(我是在既存系统上新开发,就没有改变原来的结构),
    所以我把新加php逻辑代码都放在了文件的最下面,我试着把方法移到html前面,居然解决了这个问题。。
    可是我依然不明白原理是什么,求大侠解惑-。- 小女子十分感谢^^
      

  23.   

    引用 22 楼 dear_Alice_moon 的回复:
    我建议你可以参考我的本篇博客: AJAX数据格式之HTML关于使用JQuery将HTML数据格式编写出来的代码,可以参见如下所示:<%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>AJAX--对是否已存在姓名进行测试</title><!-- 
    1、导入JQuery库
    2、获取name="username"的节点: username
    3、为username添加change响应函数
    3.1、获取username的value属性值,去除前后空格且不为空。准备发送Ajax请求。
    3.2、发送Ajax,请求检验username是否可用。
    3.3、在服务端直接返回一个html的片段:<font color="red">该用户已经被使用</font>
    3.4、在客户端浏览器把其直接添加到#message的html中。

     --><script type="text/javascript" src="${pageContext.request.contextPath}/scripts/jquery-3.2.1.js"></script>
    <script type="text/javascript">

    $(function() {
    $(":input[name='username']").change(function() {
    var val = $(this).val();
    val = $.trim(val);

    if (val != "") {
    var url = "${pageContext.request.contextPath}/valiateUserName";
    //var url = "${pageContext.request.contextPath}/ValiateUserNameServlet";
    var args = {"username":val, "time": new Date()};

    $.post(url, args, function(data) {
    $('#message').html(data);     // $().html()函数
    });
    }

    });
    });

    </script></head>
    <body>

    <form action="" method="post">

    UserName:<input type="text" name="username" />
    <br />
    <dir id="message"></dir>
    <br />
    <input type="submit" value="Submit" />

    </form>

    </body>
    </html>关于以上代码中所运用到的Java类如下所示:package com.atguigu.ajax.app.servlets;import java.io.IOException;
    import java.util.Arrays;
    import java.util.List;import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    public class ValiateUserNameServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {

    List<String> userNames = Arrays.asList("AAA", "BBB", "CCC");

    String userName = request.getParameter("username");
    String result = null;
    if(userNames.contains(userName)) {
    result = "<font color='red'>该用户名已经被使用</font>";
    }else {
    result = "<font color='green'>该用户可以使用</font>"; 
    }

    response.setContentType("text/html");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().print(result);
    }



    }-----------------------------------------------------------------------------------------
    -----------------------------------------------------------------------------------------
    我建议楼主可以下载一份JQuery的API,jquery.api.3.2.1.chm这份API中对你所疑问$.get()、$.post()、$().html、$().html等方法,讲解的很清楚。如果你想要这份jquery.api.3.2.1.chm文档,可以发私信,将你邮箱给我,我通过邮箱发送给你。
      

  24.   

    json_encode($arr);或者后台直接给, 
     if(真){
        echo 1;
    }else{
       echo 0;
    }
    前台判断数字即可。
      

  25.   


    我都试过,不行的,最后把php方法放在了html前面,就可以了。。