Php jquery.ajaxjson错了吗?

Php jquery.ajaxjson错了吗?,php,jquery,ajax,json,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

嘿,我在通过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警报,因此,如果条件都为false,为什么呢?

success: function(d) {

        data = jQuery.parseJSON(d);

        if (data.result == 0) {
            alert("0")
        }
        if(data.result == 1) {
            alert("1")
        }
    }
这是因为$.ajax不会为您解码页面中的结果文本。 php代码实际上是在向流中打印json字符串


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

您需要指定数据类型,否则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中正确设置内容类型头

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

您可以选择或,但我建议同时选择两者。

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

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

你确定成功回调正在发生吗?由于没有在ajax选项中定义数据类型,您是否在php中设置了正确的contentType?我更新了,看一下,有一个callbackbecause,因为数据是字符串,没有结果属性。请参阅我第一条评论的第二部分。那么我应该删除json_编码?响应“data”是什么样子的?如果在firebug中使用chrome/firefox,您可以使用Console.Log(数据);看一看,这是可行的,但是在php文件中发送正确的内容类型头是一个很好的做法,我建议两者都做。你是说user574632?是的,但我必须这样写:头:“内容类型:application/json”,