Javascript 如何在jQuery post方法中检查PHP返回的数据类型

Javascript 如何在jQuery post方法中检查PHP返回的数据类型,javascript,php,arrays,type-conversion,Javascript,Php,Arrays,Type Conversion,数据类型 [{"id":"1","value":"Google"},{"id":"2","value":"Samsung"}] 现在我有了一个通用函数,它根据返回的数据类型执行某些操作 对于这个特殊的数据,我正在检查它是否是数组。 为了检查返回的数据类型,我使用以下自定义函数 function typeOf (obj) { return {}.toString.call(obj).split(' ')[1].slice(0, -1).toLowerCase(); } 现在,如果我调用ty

数据类型

[{"id":"1","value":"Google"},{"id":"2","value":"Samsung"}]
现在我有了一个通用函数,它根据返回的数据类型执行某些操作

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

function typeOf (obj) {
  return {}.toString.call(obj).split(' ')[1].slice(0, -1).toLowerCase();
}
现在,如果我调用
typeOf(1)
它会返回“number”作为答案

如果我调用
typeOf(“foo”)
它将返回“string”作为答案

问题

调用
typeOf(data)
where
data=[{“id”:“1”,“value”:“Google”},{“id”:“2”,“value”:“Samsung”}]
从php页面回显,给出“string”作为答案

仅当接收到的数组类型数据变量作为

data = jQuery.parseJSON(data);
现在,我了解到可能会有这样的情况,从php得到的回音是字符串形式的,但在我的php页面执行以下操作时,是否有任何方法可以更改它

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

无论从PHP或JSP通过AJAX调用得到什么值,都将以字符串形式返回。您需要解析字符串,使脚本正确理解数据类型。您可以这样做:

data = JSON.parse(data);

if (typeof data == "object") {
  // JSON Data
} else {
  // String Data
}
片段

*{font-family:'Segoe-UI';}

函数解析数据(数据){
如果(data.length>0)
data=JSON.parse(数据);
如果(数据类型==“对象”)
return“这是带键的JSON。”;
其他的
return“这是一个由“+data.length+”字符组成的字符串。”;
}
JSON对象

写(解析数据(“{”a:“字母表”,“b:“乐趣”}”)

字符串/数字


编写(解析数据(“”))

我假设您是通过ajax获取数据的。您是否在ajax函数中指定了
数据类型:“json”
?如果没有指定数据类型,jQuery将猜测,有时甚至猜测错误


Edit:有关
$.ajax
函数的更多信息:)

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

这将导致成功处理程序的
data
参数成为包含JSON值的对象。确保检查您是否获得了一个
对象
类型数据变量,因为任何其他类型都应该表明格式错误的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
    }
});

调用
header('Content-Type:application/json')。@DJDavid98将其作为答案写入,以便我可以接受它。为什么投反对票。这篇帖子怎么了?@UzumakiNaruto我的解决方案对你不管用吗?我投了你一票。事实上,您的解决方案更干净、更简单。我喜欢!我将用我所有的代码测试它,看看它是否能完美工作。谢谢你