这是我正在使用的解决方案 - 问题在下面解释。
我不明白为什么.getJSON()
失败了。我使用.post()
作为字符串而不是JSON返回来补偿。
$.post('test.php', { action: 'test' }, function(data, status){
console.log(jQuery.parseJSON(data)); //form the JSON from a string after the POST
});
它现在可以正常工作,但会给浏览器和最终用户带来更多压力。对于大规模部署来说,节省一点服务器CPU实际上可能更好吗?无论如何。奇怪的小虫子。
我使用之前的答案开始了解我正在做的事情:using jquery $.ajax to call a PHP function
并仔细检查了我的基本用法:http://api.jquery.com/jQuery.getJSON/和http://api.jquery.com/jQuery.post/
我使用$ .post取得了圆满成功但是当使用$ .getJSON时,甚至没有返回状态..
澄清一下:我正在编辑这些函数来提问。我正在测试我已经处理过的可用的json数据我只是添加了通过ajax请求调用php函数的能力。不要被我奇怪的php echo json_encode抛弃。我的工作数据已经过验证。
无论如何,这里是.js:
$.post('test.php', { action:'test' }, function(data, status){
console.log(data); //{"test_result":"success"}
console.log(status); //success
});
$.getJSON('test.php', { action:'test' }, function(data, status){
console.log(data); //nothing
console.log(status); //nothing
}).fail(function( jqxhr, textStatus, error ) {
console.log(textStatus); //parsererror
console.log(error); //SyntaxError: Unexpected end of input
});
和我的.php:
<?php
try {
if(isset($_POST['action']) && !empty($_POST['action'])) {
$action = $_POST['action'];
switch($action) {
case 'test':
echo json_encode(array('test_result' => 'success'));
break;
}
}
} catch(Exception $e) {
echo "ERROR: " . $e->getMessage();
}
?>
这成功执行$ .post但是当我切换到$ .getJSON时它不再起作用。有一个简单的原因吗?
答案 0 :(得分:0)
您的 test.php 文件生成了错误的JSON格式,并且getJSON失败,我建议您:
echo json_encode(array('test_result' => 'success'));
使用此代码,您将获得:{"test_result":"success"}
使用原始代码echo json_encode("[{'test_result':'success'}]");
,您将获得"[{'test_result':'success'}]"
尝试添加失败回调,如:
$.getJSON('test.php', { action:'test' }, function(data, status){
console.log(data); //doesn't fire
console.log(status); //doesn't fire
}).fail(function( jqxhr, textStatus, error ) {
var err = textStatus + ", " + error;
console.log( "Request Failed: " + err );
});