【问题标题】:ajax calls return php array, json doesnt seem correctajax 调用返回 php 数组,json 似乎不正确
【发布时间】:2013-05-10 17:58:54
【问题描述】:

我有一个 ajax 调用,它会触发一个返回数组的 php 脚本。

php:

 $errors[1] = "you didn't enter name"; 
 $errors[2] = "your email is incorrect";
 $errors[3] = "You didnt enter password";
 echo json_encode($errors);

javascript:

 .....
 datatype:'json',
 success: function(result)
 {
 alert(result);   
 }

我希望看到:

 {"1":"you didn't enter name","2":"your email is incorrect","3":"You didnt enter password"}

相反,我看到: ["您没有输入姓名","您的邮箱不正确","您没有输入密码]

似乎 json_encode 做了一些时髦的事情。我错过了什么

【问题讨论】:

  • 因为你想要的是$errors['1'],而你拥有的是$errors[1]

标签: php jquery ajax arrays


【解决方案1】:

试试这个:

echo json_encode($errors, JSON_FORCE_OBJECT);

http://www.php.net/manual/en/json.constants.php

此外,您的 PHP 脚本应包含:

header("Content-Type: application/json");

在任何echo 语句之前。

【讨论】:

  • 感谢@wroniasty,这似乎有帮助。我是怎么知道的:

    {"0":"你没有输入姓名","1":"你的邮箱不正确","2":"你没有输入密码"}

    如果我尝试遍历它: for (i=0;i 当我打印 array[i]
    (array[0] = {
    array[1] = "
    array[2] = 0
    我得到每个单独的字符,而不是 "0" 中的内容......有意义吗?
  • 迭代 Object 使用:for (var key in obj) { var element = obj[key]; console.log(element); }
  • 我知道我不会把这一切都搞定。我用 for 循环得到相同的结果。控制台日志显示 { then " then 0 then " 等等...它几乎就像 javascript 不将其视为一个数组而是一个长字符串。
  • 可能是字符串,console.log(typeof result) 输出什么?
  • string....如果我警告(结果)我得到这个 {"0":"firstName 必须包含一个值。", "1":"lastName 必须包含一个值。", " 2":"callIdfirstName 必须包含值。", "3":"callIdlastName 必须包含值。", "4":"street 必须包含值。", "5":"city 必须包含值。" } 我在 php 页面上的代码。 echo json_encode($errors, JSON_FORCE_OBJECT);我什至尝试了 php::json_last_error() 并得到了 0。
【解决方案2】:

由于您只是使用数字作为键,因此假设您需要一个数组。

【讨论】:

    【解决方案3】:

    然后设置错误,因为未定义的变量会失败。

    $errors[1] = "you didn't enter name"; 
    $errors[2] = "your email is incorrect";
    $errors[3] = "You didnt enter password";
    echo json_encode($errors);
    

    不要使用这个数组配置,而是使用:

    $errors=array(NULL,
      "you didn't enter name",
      "your email is incorrect",
      "You didnt enter password"
    );
    echo json_encode($errors, JSON_FORCE_OBJECT);
    

    【讨论】:

      猜你喜欢
      • 2014-06-20
      • 1970-01-01
      • 1970-01-01
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      相关资源
      最近更新 更多