【问题标题】:how to check the type of data returned from PHP in jQuery post method如何在jQuery post方法中检查从PHP返回的数据类型
【发布时间】:2015-11-06 02:02:16
【问题描述】:

数据类型

[{"id":"1","value":"Google"},{"id":"2","value":"Samsung"}]

现在我有了一个通用函数,可以根据返回的数据类型执行某些操作。

对于这个特定的数据,我正在检查它是否是数组。 为了检查返回的数据类型,我使用了以下自定义函数。

function typeOf (obj) {
  return {}.toString.call(obj).split(' ')[1].slice(0, -1).toLowerCase();
}

现在如果我打电话给typeOf(1),它会返回“数字”作为答案

如果我打电话给typeOf("foo"),它会返回“字符串”作为答案

问题

调用typeOf(data),其中data = [{"id":"1","value":"Google"},{"id":"2","value":"Samsung"}]从php页面回显,它给出“字符串”作为答案

如果接收到的数组类型数据变量通过以下函数传递,它只返回数组

data = jQuery.parseJSON(data);

现在,我知道可能是从 php 得到回显的内容以字符串形式出现,但是当我的 php 页面正在执行以下操作时,没有任何方法可以更改它

echo json_encode(array(array(some_key=>some_data)));

【问题讨论】:

  • 在回显 JSON 之前在 PHP 文件中调用 header('Content-Type: application/json');
  • @DJDavid98 将其写为答案,以便我接受。以及为什么投反对票。帖子有什么问题?
  • @UzumakiNaruto 我的解决方案不适合你吗?

标签: javascript php arrays type-conversion


【解决方案1】:

要让 jQuery 知道您正在发送 JSON 数据,服务器必须使用正确的 Content-Type 标头进行响应。在 PHP 中,这可以通过在任何输出之前调用 header('Content-Type: application/json'); 轻松实现,并且 jQuery 将尝试解析响应。

这将导致成功处理程序的 data 参数成为包含 JSON 值的对象。请务必检查您是否获得了 object 类型的数据变量,因为任何其他类型都应表明格式错误的 JSON 数据来自您的服务器。

$.ajax({
    url: '/endpoint.php',
    method: "POST",
    data: {key:'value'},
    success: function(data){
        if (typeof data !== 'object')
            return console.error('Invalid data', data);

        // Do something with the response
    }
});

【讨论】:

    【解决方案2】:

    无论您通过 AJAX 调用从 PHP 还是 JSP 获得的值,都将其作为字符串返回。您需要解析字符串以使脚本正确理解数据类型。你可以这样做:

    data = JSON.parse(data);
    
    if (typeof data == "object") {
      // JSON Data
    } else {
      // String Data
    }
    

    片段

    * {font-family: 'Segoe UI';}
    <script>
      function parseData(data) {
        if (data.length > 0)
          data = JSON.parse(data);
        if (typeof data == "object")
          return "This is JSON with keys.";
        else
          return "This is a String of " + data.length + " characters.";
      }
    </script>
    <p><strong>JSON Object</strong></p>
    <p><script>document.write(parseData('{"a": "Alphabet", "b": "Fun"}'));</script></p>
    <p><strong>String / Number</strong></p>
    <p><script>document.write(parseData(''));</script></p>

    【讨论】:

    • 我支持你。事实上,您的解决方案更加干净和简单。我喜欢!我将用我所有的代码对其进行测试,看看它是否能完美运行。谢谢你
    【解决方案3】:

    我假设您通过 ajax 获取该数据。你在ajax函数中指定dataType: 'json'了吗?如果没有指定dataType,jQuery会猜测,有时会猜错。

    编辑:更多关于$.ajax函数的信息:http://api.jquery.com/jquery.ajax/

    【讨论】:

      猜你喜欢
      • 2021-12-13
      • 2011-02-28
      • 1970-01-01
      • 2020-02-06
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多