我有一个ajax调用,它将表单数据发送到php函数。因为我读到很多东西,所以使用contentType: 'application/json'最佳实践是我想尝试的。但不幸的是,我的脚本在使用时不返回任何内容。如果删除它,脚本将执行应做的事情。
contentType: 'application/json'
您知道原因可能是什么以及为什么吗?谢谢!
$('#Form').submit(function(e) { e.preventDefault(); var content = $(this).serialize() + "&ajax=1"; $.ajax('app/class/controller/contactForm.php', { type: "POST", //contentType: 'application/json', dataType: 'json', data: content, success: function(result) { console.log(result); } }); })
和我的PHP:
if(isset($_POST['ajax']) && $_POST['ajax'] === '1') { echo json_encode(validateForm($_POST)); }
使用时,contentType: 'application/json'您将无法依靠$_POST被填充。 $_POST仅针对表单编码的内容类型填充。
$_POST
因此,您需要像这样从PHP原始输入读取数据:
$input = file_get_contents('php://input'); $object = json_decode($input);
当然,如果要发送application/json,则实际上应该发送JSON,而您并没有这样做。您或者需要直接将对象序列化构建为JSON,或者需要执行类似的操作-使用jQuery将表单数据转换为JavaScript对象 -以从表单序列化对象。
application/json
老实说,由于您要处理表单数据,因此我不太认为有使用的用例application/json。