0

php代码

<?php
$data = trim(api_get('threads',array(),'JSON'));
echo $_GET['jsonp_callback'] . '(' . $data . ');';
?>

js代码

<script>
$.ajax({
              url: "https://abc.secure.tttt.com/",
              data:{},
              dataType: 'jsonp',
              cache: false,
              crossDomain: true,
              jsonp : "jsonp_callback",
              success: function(params){
                    console.log('showInbox');
                    //console.log(JSON.parse(params));
                    showInbox(params);
              },
              error: function (xhr, textStatus, thrownError) {
                console.log('Inside showInbox ajax failure');
                console.log(xhr.status);
                console.log(textStatus);
                console.log(JSON.stringify(xhr));
                console.log(thrownError);
              }


});

这工作正常,如果 API 提供 json 数据并且如果出现错误,则显示语法错误:

Timestamp: 5/9/2013 4:28:24 PM
Error: SyntaxError: syntax error
Source File: https://abc.secure.tttt.com/?jsonp_callback=jsonp1368095332316&_=1368097103961
Line: 1
Source Code:
<!DOCTYPE html>
4

1 回答 1

0

使用 timeout 属性来获取错误时执行的错误函数。

$.ajax({
              timeout : 2000,
              url: "https://abc.secure.tttt.com/",
              data:{},
              dataType: 'jsonp',
              cache: false,
              crossDomain: true,
              jsonp : "jsonp_callback",
              success: function(params){
                    console.log('showInbox');
                    //console.log(JSON.parse(params));
                    showInbox(params);
              },
              error: function (xhr, textStatus, thrownError) {
                console.log('Inside showInbox ajax failure');
                console.log(xhr.status);
                console.log(textStatus);
                console.log(JSON.stringify(xhr));
                console.log(thrownError);
              }


});

在大多数浏览器中,除了超时之外,无法判断 JSONP 请求是否成功。当然要设置一个合理的值,我用2秒来猜测如果服务器在这个时间没有返回文件,是有问题的。

于 2013-05-09T11:12:10.830 回答