嘿,我通过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")
}
}
});
因此,其中一个条件必须为真,因为:
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") }
}
});
现在我首先得到故障1警报,然后得到故障2警报,所以如果条件都是假,为什么?
您需要指定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中正确设置内容类型头。
header('Content-type: application/json');
你可以选择其中一种,但我建议两者都做。
解决方案可以是
success: function(d) {
data = jQuery.parseJSON(d);
if (data.result == 0) {
alert("0")
}
if(data.result == 1) {
alert("1")
}
}
这就变成了$.ajax不会为您解码页面中的结果文本。php代码实际上是在流中打印一个json字符串。
注意,传递给成功的输出可以是任何类型的文本(也可以是简单文本上的xml代码)
您需要在php文件中设置正确的内容类型头:
header('Content-Type: application/json');
//snip
echo json_encode(array("error" => "is ok", "result"=>1));