Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查JSON';他的回答是空的_Php_Javascript_Jquery_Json_Jsonp - Fatal编程技术网

Php 检查JSON';他的回答是空的

Php 检查JSON';他的回答是空的,php,javascript,jquery,json,jsonp,Php,Javascript,Jquery,Json,Jsonp,我通过JSON从MySQL获取一些数据。但是,我想确定响应是否为空,这样,如果它不是空的,我将显示返回的信息,否则我将显示一条消息 我已经尝试了多种可能的解决方案,比如检查JSON响应的长度,检查条目严重性是否存在,如果不存在,则假设它为null等等 以下是我的代码片段: var data = $.ajax({ type: 'GET', url: 'http://www.mydomain.com/php/loaddata.php?&jsoncallback=?',

我通过JSON从MySQL获取一些数据。但是,我想确定响应是否为空,这样,如果它不是空的,我将显示返回的信息,否则我将显示一条消息

我已经尝试了多种可能的解决方案,比如检查JSON响应的长度,检查条目严重性是否存在,如果不存在,则假设它为null等等

以下是我的代码片段:

var data = $.ajax({
    type: 'GET',
    url: 'http://www.mydomain.com/php/loaddata.php?&jsoncallback=?',
    dataType: 'JSONp',
    timeout: 5000,
    success: function(data) {
        $.each(data, function(i,item){
            if (item.Severity == 1) {   
                // Do Something
                .....
当JSON找到数据时,回复如下: 更新:

([{"Severity":"1","Latitude":"35.872883","Longitude":"14.449133","Address":"Some Address 1","Heading":"25","Timestamp":"2012-12-28 10:15:03"},{"Severity":"2","Latitude":"35.871269","Longitude":"14.501580","Address":"Some Address 2","Heading":"80","Timestamp":"2012-12-28 10:15:31"}]);
否则,如果未找到数据,JSON将返回:

([]);

使用强制转换可以让js引擎完成解析工作:

if (""+data == "")
{
alert("Data is empty");
}

注意:只有一个空字符串或一个空数组(可能递归地包含其他空字符串/数组)才能满足此条件,这符合您的要求

成功后您将获得的数据是JSON,因此首先您必须解析它,这样就可以了

var x = jQuery.parseJSON(data) // this will give you array 
if(x.length == 0) {
    alert("empty");
}

确保表达式被否定

success: function(data) {
    if(data.length != 0){
        $.each(data, function(i,item){
            if (item.Severity == 1) {
                //Do something
            }
        });
    }
}
检查此代码段

var result="[]"; // this is your json string result
var parsed=jQuery.parseJSON(result); //this is now an array! so we can check the length

if(parsed.length==0)
    alert("Error")
([])
不是有效的json,因此无法分析<代码>[]是

这将引发语法错误:

var json = "([])";
var obj = JSON.parse(json);
console.log(obj.length);
此操作正在运行时,将输出0:

var json = "[]";
var obj JSON.parse(json);
console.log(obj.length);
jshiddle here-

因为:Console.log返回了
“string”
-,
这应该起作用:

success: function(data) {
    if (data != '' && data !== null) { // Check if the data's not an empty string or null.
        $.each(data, function(i,item){
            if (item.Severity == 1) {
                // Do Something

你检查过data.length吗?@ryadavilli是的,但它不起作用。我尝试过如果(data.length==0)需要对该表达式求反,那么如果数据为空,则返回什么?(
console.log(数据类型,数据);
)这是wierd。如果您得到一个空数组,数据实际上将是一个长度为0的数组。如果JSON结果是一个对象,这将不起作用。对象没有
.length
属性。(JSON响应通常都是对象)在他发布的两个示例中,都是数组,而不是对象,所以我假设我们只使用了arrays@LucaTrazzi在我的情况下,我需要把这个代码放在哪里?在成功功能下?(抱歉-我在这方面是n00b:()是的,但结果是您的数据:)好的,我取消了我的答案,如果您认为这不起作用,请解释原因。嗯,我认为将数据转换为字符串是检查它是否为空的一种非常丑陋的方法,特别是因为数据(响应)已经是字符串。我不这样认为,否则问题不准确:数据=[{“key”:“val”}];而不是data=“[{“key\”:\“val\”}];这是绝对不同的。php的(json)结果总是一个字符串。(除非您返回图像等)好的,这与数据类型有关,现在将数据类型指定为“json”将使jQuery为您解析它(并返回解析后的对象)。现在我假设为“JSONp”要以与“json”相同的方式操作(根据文档,应该是这种情况,但从未尝试过):@sourecode我尝试过,但它给了我一个错误:Uncaught TypeError:无法读取null的属性“length”,请使用此A.splice(0,A.length),还可以使用stringyfy()这将为您提供emty字符串,然后您可以检查是否有空字符串。我将向此解决方案添加
&&data!==null
。当jQuery尝试解析非json的字符串时,它将返回
null