使用jquery ajax来调用php函数 - 来自之前答案的奇怪问题

时间:2013-12-15 05:41:05

标签: javascript php jquery

这是我正在使用的解决方案 - 问题在下面解释。

我不明白为什么.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时它不再起作用。有一个简单的原因吗?

1 个答案:

答案 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 );
});