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)
wheredata=[{“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')在回显JSON之前,在PHP文件中输入code>。@DJDavid98将其作为答案写入,以便我可以接受它。为什么投反对票。这篇帖子怎么了?@UzumakiNaruto我的解决方案对你不管用吗?我投了你一票。事实上,您的解决方案更干净、更简单。我喜欢!我将用我所有的代码测试它,看看它是否能完美工作。谢谢你