jquery.ajax json错了吗?

时间:2013-11-25 22:38:51

标签: php jquery ajax json

嘿,我在通过jquery提交我的数据时遇到了问题:

$.ajax({
    url: "checkAvailability.php",
    type: 'POST',
    data : {data:JSON.stringify(data)},
    success: function(data) {
        if (data.result == 0) {
            alert("0")
        } 
        if(data.result == 1) {
            alert("1")
        }
    }
});

所以, 其中一个if条件必须为真,因为:

checkAvailability.php:

if(isset($_POST['data'])) {
    define('SECURE', true);
    include "storescripts/connect_to_mysql.php";

    require 'AvailabilityChecker.php';

$config = array(etc..);

    $availabilityChecker = new AvailabilityChecker($config);

    $data = $_POST['data'];
    $data = json_decode($data,true);

    preg_match( '/(\d+(\.\d+)?)/', $data['x'] , $m);
    $x =  $m[0];

    if($availabilityChecker->check_availability($x)) {
        echo json_encode(array("error" => "is ok", "result"=>1));
    } else {
        echo json_encode(array("error" => "not ok", "result"=>0));
    }
}

data.result必须是1或0。 任何人都可以告诉我为什么没有警报信息?问候!

更新:

$.ajax({
    url: "checkAvailability.php",
    type: 'POST',
    data : {data:JSON.stringify(data)},
    success: function(data) {
        if (data.result == 0) {
            alert("0")
        } else { alert("fail-1") }
        if(data.result == 1) {
            alert("1")
        } else { alert("fail-2") }
    }
});

现在我首先获得fail-1警报而不是fail-2警报,所以if-conditions都是false,为什么?

3 个答案:

答案 0 :(得分:1)

您需要指定dataType,否则jquery会尝试猜测您要执行的操作。在这种情况下,它错误地猜测text / html而不是application / json。

$.ajax({
    url: "checkAvailability.php",
    type: 'POST',
    dataType: 'json',
    data : {data:JSON.stringify(data)},
    success: function(data) {
        if (data.result == 0) {
            alert("0")
        } else { alert("fail-1") }
        if(data.result == 1) {
            alert("1")
        } else { alert("fail-2") }
    }
});

在回显json之前,你还应该在php中正确设置content-type标头。

header('Content-type: application/json');

你可以做任何一件事,或者,但我建议你做两件事。

答案 1 :(得分:0)

解决方案可以

success: function(d) {

        data = jQuery.parseJSON(d);

        if (data.result == 0) {
            alert("0")
        }
        if(data.result == 1) {
            alert("1")
        }
    }

这样因为$ .ajax将不会为您解析页面中的结果文本。 事实上,php代码的作用是将json字符串打印到流中。

请注意,传递给成功的输出可以是任何类型的文本(也只是文本上的xml代码)

答案 2 :(得分:0)

您需要在php文件中设置正确的内容类型标题:

header('Content-Type: application/json');
//snip
echo json_encode(array("error" => "is ok", "result"=>1));