2011-03-02 54 views
1

我使用jQuery的$ .post从查询中获取值并(试图)用这些值填充表单。填充插件需要一个JSON对象。为了测试我的成功回调,我提醒并显示数据 - 这对我来说看起来像有效的JSON,但该插件不加载表单字段。但是,如果我用一个字面值替换{“cust_id”:“65”},它起作用。 这是什么问题? 谢谢。

.....这里的客户端:

<script type="text/javascript"> 

    $(".button").click(function() {   

     var suite = $("input#suite_no").val(); 

     $.post("get_custrec.php", 
     { suite_no: suite }, 
     function(data){ 
      data = data.substring(1, data.length-1); 
      $('#output').html(data); 
      alert("Data: " + data); 
      $('#custForm').populate(data); 
     } 
     ); 
     return false; 
    }); 
    </script> 

.......我的服务器(PHP)代码:

$result = mysql_query($sql); 

    $arr = array(); 
    while($obj = mysql_fetch_object($result)) { 
    $arr[] = $obj; 
    } 
    echo json_encode($arr); 
+0

显示populate()函数。 – usoban 2011-03-02 01:28:36

回答

1
$.post("get_custrec.php", 
    { suite_no: suite }, 
    function(data){ 
     data = data.substring(1, data.length-1); 
     $('#output').html(data); 
     alert("Data: " + data); 
     $('#custForm').populate(data); 
    }, 'json' //just need to add this ;) 
    ); 
+0

感谢您的回答。我尝试添加'json',但输出和警报功能不显示。我将如何设置HHTP头$(”按钮 “)点击(函数(){\t \t \t VAR套装= $(” 输入#suite_no “)VAL(); \t警报(” 套房?: “+套件); \t $ .POST(” get_custrec.php”, \t {suite_no:套件}, \t功能(数据){ \t \t //变种newdata =新的字符串(数据); \t \t// data = data.toString()。substring(1,data.length-1); \t \t \t $('#output')。html(data); \t \t \t alert(“Data:”+ data); \t \t $('#custForm')。populate(data); \t \t \t \t},'json' \t); 返回false; }); – hadenp 2011-03-02 16:40:00

+0

首先 - 如果您以json的身份接收数据,请将该子串从那里取出。它不会工作,是无用的。 – JohnO 2011-03-02 23:45:50

+0

感谢这个建议,对不起,我花了很长时间才回来看看它......但是我的substring的原因是从json_encode返回的数据回到括号中,就像[{“cust_id”:“65”} ]。我会重新检查一下。 – hadenp 2011-03-08 02:01:03

1

如果你不这样做指定将返回的dataType,jQuery试图通过查看响应的MIME类型(例如HTTP Content-Type标题)来猜测它。因为它看起来并不像你设置的头,你需要:

  • 设置正确的HTTP标头:header("Content-Type: application/json");和/或
  • 告诉jQuery的数据类型是什么,多一个参数$.post()

    $.post('get_custrec.php', {...}, function (data) {...}, 'json')

任一个就足够了;使用两者都不会伤害。

相关问题