【问题标题】:json not value but print_r has value php pdo jquery ajaxjson 没有价值,但 print_r 有价值 php pdo jquery ajax
【发布时间】:2015-03-18 06:12:57
【问题描述】:
if (isset($_POST['continentid'])) {
      $stmt = $dbh->prepare("SELECT * FROM country_tbl WHERE parent_id = ? ");
      $stmt->bindValue(1, $_POST['continentid'], PDO::PARAM_STR);
    if ($stmt->execute()) {
        if ($stmt->rowCount() > 0) {
            while ($selected_row = $stmt->fetch(PDO::FETCH_ASSOC)) {
                $country[] = array('sysid' => $selected_row['sys_id'],'name' => $selected_row['countryname']);
            } 
            //print_r($country);
            echo json_encode($country);
            //echo "312321321321";
            //return $country;

        }
    }
}


$.ajax({
    type: 'POST',
    url: '../include/country.php',
    dataType : "json",
    data: {
        continentid: id
    },
    success: function(data) {
       for(var i = 0; i < data.length; i++) {
           console.log("PAIR " + i + ": " + data[i].sysid);
           console.log("PAIR " + i + ": " + data[i].name);
       }
    }
});

我上面有这段代码,它使用 jquery ajax 发送请求,它将返回一个 id,该 id 将用作 select 语句的参数。然后我在选择选项框上使用这些值。我已经为此here 发布了一个问题。现在可以正常工作了为国家。问题是为什么列表中的第一个值没有给出 json 值,但如果 print_r 它有值,这个设置有什么问题?

Update

如果我这样做了

print_r($country); echo json_encode($country);

对于第一个元素

Array
(
    [0] => Array
        (
            [sysid] => 1
            [code] => 140101000
            [name] => China
            [parentid] => 1
        )

    [1] => Array
        (
            [sysid] => 2
            [code] => 140102000
            [name] => Japan
            [parentid] => 1
        )

    [2] => Array
        (
            [sysid] => 3
            [code] => 140103000
            [name] => Hongkong
            [parentid] => 1
        )
)

如果我这样做了

print_r($country); echo json_encode($country);

第二个元素

Array
(
    [0] => Array
        (
            [sysid] => 1
            [code] => 140101000
            [name] => China
            [parentid] => 1
        )

    [1] => Array
        (
            [sysid] => 2
            [code] => 140102000
            [name] => Japan
            [parentid] => 1
        )

    [2] => Array
        (
            [sysid] => 3
            [code] => 140103000
            [name] => Hongkong
            [parentid] => 1
        )
)


[
{"sysid":"1","code":"140101000","name":"China","parentid":"1"},{"sysid":"2","code":"140102000","name":"Japan","parentid":"1"},{"sysid":"3","code":"140103000","name":"Hongkong","parentid":"1"}
]

UPDATE

我想我找到了问题,虽然我还没有找到解决方案,但我认为字符 ñ' 是他们不会为 json 返回值的原因,知道如何让它返回这些值吗?

【问题讨论】:

  • 请分享你的json结构。
  • 类似上面的...例如,一个是大陆列表,第一个不会返回值,但如果 print_r 我将返回值
  • country.php 上使用 json_encode 并与问题分享输出
  • 如果print_r 和您的json 之间存在差异,请在问题中添加两者。所以其他人很容易发现问题
  • 不同之处在于,当我执行 print_r 时,我在 ajax 成功中得到输出,但在 json 上没有输出

标签: php jquery ajax json pdo


【解决方案1】:

试试看。 JSON.parse(data) 将字符串转换为 json。

    $.ajax({
    type: 'POST',
    url: '../include/country.php',
    dataType : "json",
    data: {
        continentid: id
    },
    success: function(data) {
  data=  JSON.parse(data);
      data.each(key,value)  {

           console.log("PAIR " + i + ": " + data[key].sysid);
           console.log("PAIR " + i + ": " + data[key].name);
       }
    }
});

【讨论】:

  • 使用(每个循环)函数而不是(for循环)
  • 抱歉我没看到
  • data.each(key,value) { console.log("PAIR" + i + ":" + data[key].sysid); console.log("PAIR" + i + ":" + data[key].name); } 用这个代替 (forloop)
  • data.each(key,value) { 意外令牌 { 当我删除它时,我得到了意外的令牌 A
【解决方案2】:
$.ajax({
    type: 'POST',
    url: '../include/country.php',
    dataType : "json",
    data: {
        continentid: id
    },
    success: function(data) {
  data=  JSON.parse(data);
      data.each(key,value)  {

           console.log("PAIR " + i + ": " + value.sysid);
           console.log("PAIR " + i + ": " + value.name);
       }
    }
});

【讨论】:

    【解决方案3】:

    试试这个,

    success: function(data) {
       $(data).each(function(i,v){
           console.log("PAIR " + i + ": " + v.sysid);
           console.log("PAIR " + i + ": " + v.name);
       });
    }
    

    var data = [{
      "sysid": "1",
      "code": "140101000",
      "name": "China",
      "parentid": "1"
    }, {
      "sysid": "2",
      "code": "140102000",
      "name": "Japan",
      "parentid": "1"
    }, {
      "sysid": "3",
      "code": "140103000",
      "name": "Hongkong",
      "parentid": "1"
    }];
    $(data).each(function(i, v) {
      console.log("PAIR " + i + ": " + v.sysid);
      console.log("PAIR " + i + ": " + v.name);
    });
    &lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;

    更改一段 php 代码,例如,

    if ($stmt->rowCount() > 0) {
         $country=array();// initialise $country first
         while ($selected_row = $stmt->fetch(PDO::FETCH_ASSOC)) {
             $country[] = array('sysid' => $selected_row['sys_id'],'name' => $selected_row['countryname']);
         } 
         echo json_encode($country);
     }
    

    【讨论】:

    • 相同的结果先生,json 没有 console.log,但第一个元素有 print_r,但第二个元素都存在
    • 从您的 php 代码中删除 print_r($country)。只有echo json_encode();当您使用dataType : "json", 时。并且响应必须是json格式
    • 我删除 print_r 相同的东西 no console.log for first for second 有
    • 我需要更改其他,因为我可以看到您只添加初始化吗?我添加初始化然后您的代码相同,为什么会发生这种情况?
    • @HogRider 你能给我看看你的在线演示吗?如果不是,那么似乎很难指出问题所在。
    【解决方案4】:

    将这一行 $dbh-&gt;query("SET CHARACTER SET utf8"); 添加到我的配置文件中解决了问题,因此它确实与特殊字符有关,例如 ñ json_encode 如果有特殊字符则返回 null 值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-30
      • 2021-11-07
      • 1970-01-01
      • 1970-01-01
      • 2011-09-24
      相关资源
      最近更新 更多