将PHP返回JSON给JQUERY AJAX调用

41

我仍然在努力理解JQUERY、AJAX和PHP的细节。

我现在可以成功调用PHP,处理表单元素并发送电子邮件,但是我无法处理AJAX返回。每次都会激活error:选择器,当我尝试列出所谓的JSON返回时,得到的信息显然是错误的。

带有所谓JSON返回的PHP

<?php

touch('phpTouch.txt');
// process email
$email=1;
if ($email) {
    $value = array('return' => 1, 'msg1' => 'Message sent OK, we will be in touch ASAP');
} else {
    $value = array('return' => 0, 'msg1' => 'Message Failed, please try later');
}
$output = $json->encode($value);
echo $output;

?>

Javascript和AJAX

function submitForm(evt) {
    $('#msgid').html('<h1>Submitting Form (External Routine)</h1>');
    if ($('#formEnquiry').valid() ) {
        $("#msgid").append("<h1>(Outside Ready) VALIDATED send to PHP</h1>");
            $.ajax({
            url: "ContactFormProcess3.php",
            type: "POST",
            data: $('#formEnquiry').serialize(),
            dataType: "json",
            success: function (data) {
                alert("SUCCESS:");
                for(var key in data) {
                    $('#msgid').append(key);
                    $('#msgid').append('=' + data[key] + '<br />');
                }
            },
            error: function (data) {
                alert("ERROR: ");
                for(var key in data) {
                    $('#msgid').append(key);
                    $('#msgid').append('=' + data[key] + '<br />');
                }
            }
        });
    } else {
        $('#msgid').append('<h1>(Outside Ready) NOT VALIDATED</h1>');
    }
    evt.preventDefault();
};

假定的JSON数据清单

readyState=4
setRequestHeader=function (a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this}
getAllResponseHeaders=function (){return s===2?n:null}
getResponseHeader=function (a){var c;if(s===2){if(!o){o={};while(c=bF.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c}
overrideMimeType=function (a){s||(d.mimeType=a);return this}
etc etc 

如果有人能够指导我犯了什么傻瓜错误,那我将非常感激。


$json在哪里定义的?你可以直接使用json_encode(); - Prisoner
你使用的是哪个版本的jQuery? - marc
@marc 版本 1.6.2 在 Google CDN 上。 - mcl
@Prisoner。我按照你的建议进行了更改。我显然是错的。再次复制代码,但仍然不能像我希望的那样工作 - 仍然列出了虚假值。 - mcl
应该有一个输出状态=...那里的值是什么? - marc
@marc 状态码是200。问题已解决,你们都是对的。当我将 $json 更改为 json_encode 时,我留下了前导 $,因此我得到了一个 PHP 错误,即使我改用 header() 的方式,错误仍然存在。非常抱歉我这么愚蠢。 - mcl
1个回答

115

你可以用以下方式在PHP中返回JSON:

header('Content-Type: application/json');
echo json_encode(array('foo' => 'bar'));
exit;

谢谢你的提示。我尝试了,但是结果还是一样。为什么error:总是被执行? - mcl
非常感谢。我现在明白了为什么,你是正确的。现在已经修复并且正常工作。 - mcl
我添加了 exit,因为 JSON 响应后面不应该有其他内容,希望您不介意。 - Phil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接