Ajax成功回调从未执行过,parsererror

时间:2016-02-29 17:38:12

标签: javascript php jquery ajax

我正在对服务器端PHP脚本进行简单的AJAX调用,但是永远不会执行成功回调。相反,在错误回调下我得到错误'parsererror'。我已经搜索了stackoverflow并尝试了一切,但没有任何作用。

如果我尝试使用相关字段将URL加载到PHP脚本,在本例中为http://....../matching.php?cmd=generate&N=2&M=3,我将获得JSON格式的正确数据,并返回该数据。例如,

{"N":"2","M":"3","E":[[1,1,39],[0,3,100],[2,1,50]]}

AJAX CALL

$('form').on('submit', function(event) {
        event.preventDefault();
        $.ajax({
            url: 'matching.php',
            dataType: 'json',
            contentType: 'json',
            type: 'GET',
            data: {
                cmd: "generate",
                N: $('#n1').val(),
                M: $('#n2').val()
            },
            success: function(data) {
                alert(data);
                leftCount = data.N;
                rightCount = data.M;
                returnedArray = data.E;
                generateFirstPage();
            },
            error: function(request,error) { 
                alert(request.responseText);
                alert(error);
            }
        });

    })

PHP

<?php

if (isset($_GET['cmd'])) {
    $n = $_GET["N"];
    $m = $_GET["M"];
    echo json_encode(generateEdges($n, $m));
    exit;
}

function generateEdges($n, $m) {
    $edgeNumber = rand($n,$n*2);
    $e = array();
    for($i=0; $i<$edgeNumber; $i++) {
        array_push($e, array(rand(0,$n), rand(0,$m), rand(1,100)));
    }
    return $finalArray = array('N' => $n, 'M' => $m, 'E' => $e);
}

?>

执行console.log(request.reponseText)会给出

{"N":"2","M":"3","E":[[1,0,42],[1,3,48],[0,3,44],[0,0,8]]}

1 个答案:

答案 0 :(得分:0)

我认为错误是你的AJAX调用实际上没有击中你的matching.php文件。我将你的代码复制到我自己的2个文件中,1个包含HTML和javascript(虽然我确实用$(document).ready(function() { ... })包装了javascript,但这似乎不是你的问题。)

当我点击提交时,调用我自己的“matching.php”但是将该文件留空,我得到你提到的parsererror。如果我然后让matching.php执行你提供的代码,它就会达到成功条件,一切都很好。我认为这个问题不是PHP甚至是你的javascript,只是在寻找matching.php的地方。

使用Firebug或Chrome的开发人员javascript控制台查看ajax网络调用以查看它是否实际点击它。这可能只是一个不同问题的症状,但值得仔细检查,imo。