2015-12-23 62 views
1

我的代码(的index.html)jQuery的+追加+ PHP

<script> 
    $(document).ready(function() { 
     var interval = setInterval(function() { 
      $.get("load_txt.php", { 'var1': 4, 'var2' : 52}, 
       function(data){ $('#msg').append(data); }, "json"); 
      }); 
     }, 1000); 
    }); 
</script> 
<p id='msg'></p> 

我的代码(load_txt.php)

<?php 
$var1 = $_GET['var1']; 
$var2 = $_GET['var2']; 

    $data = "var1= " . $var1 . " " . "var2= " . $var2; 

    echo json_encode($data); 
?> 

它不工作,没有什么是显示#msg。你能看到一些错误吗?如果是,请回答,thx :)

+0

错误在控制台? –

+0

无。控制台是干净的 – Meldiron

+0

你应该检查什么返回你的PHP脚本,我想一个错误。顺便说一句,每秒发送一个请求,无需等待任何前一个完成是一个不行, –

回答

5

你实际上并没有返回JSON。你通过json_encode运行一个没有键的字符串,它只是给你一个字符串。然后返回给期待JSON的jQuery,所以最有可能抛出一个尝试反序列化一个普通字符串的错误。

为了解决这个问题,改变你的PHP代码实际上将返回JSON:

var interval = setInterval(function() { 
    $.get("load_txt.php", { 
     'var1': 4, 
     'var2': 52 
    }, function(data) { 
     $('#msg').append(data.var1 + ' ' + data.var2); 
    }, "json"); 
}, 1000); 

还要注意的是使用setInterval使得AJAX请求:

echo json_encode(array('var1' => $var1, 'var2' => $var2)); 

并修改您的jQuery从deserialised对象读取这不是一个好主意,就好像请求花费的时间比完成时间要长,它们会堆积起来。这是更好地使用setTimeout,使新的请求时,前一个已完成:

function makeRequest() { 
    $.get("load_txt.php", { 
     'var1': 4, 
     'var2': 52 
    }, function(data) { 
     $('#msg').append(data.var1 + ' ' + data.var2); 
     setTimeout(makeRequest, 1000); // on success 
    }, "json"); 
} 
makeRequest(); // on load 
+0

我绝对不知道为什么,但它仍然无法正常工作。屏幕截图:http://imgur.com/a/IcqV0 – Meldiron

+0

好的,你有没有在控制台中的错误? –

+0

@Meldiron清除您的浏览器缓存,当然还有 –

-1

这只是一个语法错误:

此代码工作正常:

$(document).ready(function() { 
    var interval = setInterval(function() { 
     $.get("load_txt.php", { 'var1': 4, 'var2' : 52}, 
      function(data){ $('#msg').append(data); }, "json"); 
    }, 1000); 
}); 

;请注意,此(**)件需要删除:

$(document).ready(function() { 
    var interval = setInterval(function() { 
     $.get("load_txt.php", { 'var1': 4, 'var2' : 52}, 
      function(data){ $('#msg').append(data); }, "json"); 
     **});** 
    }, 1000); 
});