我的php回调函数发送 - 如果在数据库中找不到结果 - 返回以下内容:
header( "Content-Type: application/json" );
echo json_encode( array(
'success' => false
,'error' => 'No results'
) );
exit;
当发回JSON编码的字符串时,我可以在.success()
函数期间没有探测器进行拦截,只需返回并打开一个对话框。
什么行不通的是拦截.complete()
函数,该函数在 success/error
被触发后被触发。在complete
函数中,我有status = success
,并且只能看到error
里面的jqxhr.responseText
格式化为字符串:"{"success":false,"error":"No results"}"
。
我无法使用error
,因为它不是404/whatever
。这只是没有结果。
当我现在去添加substring
检查各种错误消息时,我会生气。
注意:我正在将jQuery与jQuery Mobile结合使用。
数据按$.ajax()
进行处理,如下所示(简化示例):
$.ajax( {
type: 'POST'
,url: my_object.ajaxurl
,data: my_data
,success: function( response, status, request )
{
if ( false == response.success )
{
$( '#note h3' ).html( response.error );
return $.mobile.changePage( '#note', 'pop', true, true );
}
// Markers
doStuffWith( response.data );
$.mobile.changePage( $( '#another_view' ) );
}
,error: function( jqxhr , settings , exception )
{
}
,complete: function( jqxhr, status )
{
console.log( jqxhr );
console.log( status );
// @TODO ABORT IF ERROR
$( '#list_canvas' ).listview( 'refresh' );
}
} );
答案 0 :(得分:0)
只需在成功回调结束时调用listview刷新,然后删除完整的回调。
答案 1 :(得分:0)
如果您read up了解完整的函数参数返回的内容,您会看到这些消息中有success
条消息。完成回调是在执行成功/错误功能后执行的。由于您甚至没有使用错误功能,因此您无法将其置于成功功能中。
所以你可以这样做
complete: function( jqxhr, status )
{
console.log( jqxhr );
console.log( status );
if(status == "success"){
$( '#list_canvas' ).listview( 'refresh' );
}
}
或者只是完全转储整个回调并在成功函数中进行刷新
success: function( response, status, request )
{
if ( false == response.success )
{
$( '#note h3' ).html( response.error );
return $.mobile.changePage( '#note', 'pop', true, true );
}
// Markers
doStuffWith( response.data );
$.mobile.changePage( $( '#another_view' ) );
$( '#list_canvas' ).listview( 'refresh' );
}
如果您因为尝试刷新尚未初始化的列表视图而收到错误,那么您应该专注于在进行任何AJAX调用之前初始化listview 。