所以,我有一个阻止默认帖子提交的ajax调用,服务器端我做了一些验证和检查,如果数据是正确的我做了一些数据库操作(为用户插入项目等)但是如果数据不正确我不必做任何事情,但抛出一个错误(即已经存在的项目)。我在控制器中的情况是这样的:
} else {
print('Item already present');
}
但现在我有一个管理错误的ajax调用:
error: function( xhr, status, errorThrown ) {
alert( "Sorry, there was a problem!" );
console.log( "Error: " + errorThrown );
console.log( "Status: " + status );
console.dir( xhr );
},
很明显,php不会打印任何东西。 我应该如何修改我的php以便在ajax调用中表现良好?
答案 0 :(得分:1)
当您进行ajax调用时,您应该期待返回特定类型的数据。一个典型的(示例)场景是使用JSON获取数据。如果您使用的是jQuery,那么我通常会在两个地方查找错误,因为我认为ajax错误有两种类型:
因此,在您的php服务器上,您将有一个视图需要将标头设置为JSON响应,然后输出JSON错误,例如:
<?php
// output a json version of any list of objects that has the
// "toArray()" method defined.
// ...for ajax calls.
header( 'Content-type: application/json' );
$isError = 'false';
if (checkToSeeIfErrorOccurred())
{
$isError = 'true',
$errorMessage = getErrorMessages();
}
?>
<!-- define json result -->
{
error: "<?php echo $isError; ?>",
errorMessage: "<?php echo $errorMessage; ?>"
}
因此,在您的客户端,在(例如)您的jquery ajax调用中,您将定义一个需要检查此错误的successHandler,并指定返回值的dataType。请注意,即使它是一个成功的手柄,成功&#39;部分只是意味着您没有抛出网络或编程/ PHP错误。因此,您仍需要检查可能在JSON中返回的逻辑错误:
// your error handler
function myErrorHandler( xhr, status, errorThrown )
{
alert( "Sorry, there was a problem!" );
console.log( "Error: " + errorThrown );
console.log( "Status: " + status );
console.dir( xhr );
};
function mySuccessHandler( response )
{
// response is returned as an object
if (response.error === 'true')
{
// maybe call same error handler?
myErrorHandler( 'whoCares', 'logicalFailure', response.errorMessage );
}
else
{
// handle success
}
};
$.ajax(
url,
dataType: 'json',
error: myErrorHandler,
success: mySuccessHandler,
...
);
我不知道这对其他人来说是否是典型的,这只是一个例子,但对我来说效果很好......
答案 1 :(得分:0)
您可以考虑的一种方法是使用ajax来执行您的请求,然后使用php echo语句的结果返回xml。如果结果成功那么你的代码会做它需要做的事情作为php服务器的一部分返回你有一个xml错误标记,为什么它出错了然后在你的ajax中处理它。
另一种可以返回结果的方法是使用json。