Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Phonegap和jQuery中调用JSONP时出现未知错误_Jquery_Jquery Mobile_Cordova - Fatal编程技术网

从Phonegap和jQuery中调用JSONP时出现未知错误

从Phonegap和jQuery中调用JSONP时出现未知错误,jquery,jquery-mobile,cordova,Jquery,Jquery Mobile,Cordova,我有以下html代码: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <meta name="viewport" content="width=device-width, initial-scale=1"> <sc

我有以下html代码:

<!DOCTYPE html> 
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <meta name="viewport" content="width=device-width, initial-scale=1"> 
        <script src="js/jq.js"></script>
        <script src="js/jqm.js"></script>
        <script src="js/jstore.js"></script>
        <script src="js/progressbar.js"></script>
        <script src="js/sql.js"></script>
        <script src="js/phonegap-1.4.1.js"></script>
        <script src="js/sha512.js"></script>
    </head>
    <body>
        <!-- Start of first page: #one -->
        <div data-role="page">
            <!-- header -->
            <div data-role="header">
                <table width="100%" border="0" cellpadding="0" cellspacing="0">
                    <tr>
                        <td>

                        </td>
                        <td>
                        </td>
                    </tr>
                </table>
            </div>
            <!-- /header -->
            <div data-role="content" data-theme="a">
                <center>
                    <span class="progressBar" id="pb1"></span>
                    <br />
                    Initial Syncronisation in progress!
                </center>
            </div>  
            <!-- footer -->
            <div data-role="footer">

            </div>
            <!-- /footer -->
            <script lang="text/javascript">
                document.addEventListener("deviceready", onDeviceReady, false);
                function onDeviceReady() {
                   $("#pb1").progressBar();
                   $("#pb1").progressBar(5);
                   $.ajax({
                        url: 'https://url/user/'+$.jStorage.get("username","false")+'/modeSet/'+$.jStorage.get("password","false")+'/subSequence/'+hex_md5(new Date().getTime())+'.html',
                        dataType:'jsonp',
                        jsonp:'jsonp_callback',
                        jsonpCallback:'infoData',
                         success: function (data) {
                                alert('success');
                       },
                       error:function (xhr, ajaxOptions, thrownError){
                            alert(xhr.status);
                            alert(thrownError);
                        } 
                   });
                }
            </script>
        </div>
    </body>
</html>
它运行在真正的三星Galaxy S2上,搭载Android 4.0.4。我有网络连接,但我不知道哪里出了问题

服务器返回的文档:

infoData({"validJsonDocument":"yes"});
我正在将Phonegap 1.4.1与jQuery 1.7.1和jQuery mobile一起使用


其他库实际上没有被使用。

JSONP代表带填充的JSON。填充表示将JSON响应发送回客户端时,围绕JSON响应的函数名

当接收到结果时,它实际上被当作普通JavaScript处理,并被这样处理。因此,将调用围绕JSON的函数

这意味着为了让JSONP正常工作,DOM中必须存在一个与封装JSON响应的函数名匹配的函数

此外,您还使用以下命令指定了“infoData”作为回调函数的名称:

指定JSONP请求的回调函数名。将使用此值代替jQuery自动生成的随机名称。最好让jQuery生成一个唯一的名称,因为这样可以更容易地管理请求并提供回调和错误处理。当您希望对GET请求启用更好的浏览器缓存时,可能需要指定回调。从jQuery1.5开始,您还可以使用函数进行此设置,在这种情况下,jsonpCallback的值被设置为该函数的返回值

尝试在页面上定义一个名为“infoData”的函数,该函数只接受一个参数,这将使您克服此错误

function infoData(jsonObj) {
    alert(JSON.stringify(jsonObj));  // print the raw JSON object
    alert(jsonObj.validJsonDocument); // access the property in your JSON object.
}

或者,您可以采纳jQuery文档的建议,完全删除jsonpCallback选项,并依赖您已经定义的成功回调。

JSONP代表带填充的JSON。填充表示将JSON响应发送回客户端时,围绕JSON响应的函数名

当接收到结果时,它实际上被当作普通JavaScript处理,并被这样处理。因此,将调用围绕JSON的函数

这意味着为了让JSONP正常工作,DOM中必须存在一个与封装JSON响应的函数名匹配的函数

此外,您还使用以下命令指定了“infoData”作为回调函数的名称:

指定JSONP请求的回调函数名。将使用此值代替jQuery自动生成的随机名称。最好让jQuery生成一个唯一的名称,因为这样可以更容易地管理请求并提供回调和错误处理。当您希望对GET请求启用更好的浏览器缓存时,可能需要指定回调。从jQuery1.5开始,您还可以使用函数进行此设置,在这种情况下,jsonpCallback的值被设置为该函数的返回值

尝试在页面上定义一个名为“infoData”的函数,该函数只接受一个参数,这将使您克服此错误

function infoData(jsonObj) {
    alert(JSON.stringify(jsonObj));  // print the raw JSON object
    alert(jsonObj.validJsonDocument); // access the property in your JSON object.
}

或者,您可以采纳jQuery文档的建议,完全删除jsonpCallback选项,并依赖您已经定义的成功回调。

我将代码修改为以下内容:

<script lang="text/javascript">
            document.addEventListener("deviceready", onDeviceReady, false);
            function onDeviceReady() {
               $("#pb1").progressBar(5);
               $.ajax({           
                    url: 'http:url/jsonp.html', 
                    dataType: 'jsonp',
                    jsonp: 'callback',
                    jsonpCallback: 'jsonpCallback',
                    success: function (data) {
                            $("#pb1").progressBar(25);
                            alert(data.version);
                    },
                    error:function (xhr, ajaxOptions, thrownError){
                        alert(xhr.status);
                        alert(thrownError);
                    }                       
                }); 

            }
            function jsonpCallback(data){
                alert(data.message);
            }
        </script>

文件。添加的监听器(“deviceready”,OnDeviceraddy,false);
函数ondevicerady(){
$(#pb1”)。进度条(5);
$.ajax({
url:'http:url/jsonp.html',
数据类型:“jsonp”,
jsonp:“回调”,
jsonpCallback:'jsonpCallback',
成功:功能(数据){
美元(pb1).progressBar(25);;
警报(data.version);
},
错误:函数(xhr、ajaxOptions、thrownError){
警报(xhr.状态);
警报(thrownError);
}                       
}); 
}
函数jsonpCallback(数据){
警报(数据、消息);
}
如果我在Google Chrome中打开页面,它就可以正常工作。 如果我在android浏览器中打开它,它也会做同样的事情。 给我一个错误200,并说没有调用jsonpCallback。 我真的不知道为什么剧本会让我这么难受。
Chris

我将代码修改为:

<script lang="text/javascript">
            document.addEventListener("deviceready", onDeviceReady, false);
            function onDeviceReady() {
               $("#pb1").progressBar(5);
               $.ajax({           
                    url: 'http:url/jsonp.html', 
                    dataType: 'jsonp',
                    jsonp: 'callback',
                    jsonpCallback: 'jsonpCallback',
                    success: function (data) {
                            $("#pb1").progressBar(25);
                            alert(data.version);
                    },
                    error:function (xhr, ajaxOptions, thrownError){
                        alert(xhr.status);
                        alert(thrownError);
                    }                       
                }); 

            }
            function jsonpCallback(data){
                alert(data.message);
            }
        </script>

文件。添加的监听器(“deviceready”,OnDeviceraddy,false);
函数ondevicerady(){
$(#pb1”)。进度条(5);
$.ajax({
url:'http:url/jsonp.html',
数据类型:“jsonp”,
jsonp:“回调”,
jsonpCallback:'jsonpCallback',
成功:功能(数据){
美元(pb1).progressBar(25);;
警报(data.version);
},
错误:函数(xhr、ajaxOptions、thrownError){
警报(xhr.状态);
警报(thrownError);
}                       
}); 
}
函数jsonpCallback(数据){
警报(数据、消息);
}
如果我在Google Chrome中打开页面,它就可以正常工作。 如果我在android浏览器中打开它,它也会做同样的事情。 给我一个错误200,并说没有调用jsonpCallback。 我真的不知道为什么剧本会让我这么难受。
Chris

您是否忘记在问题中包含infoData函数的函数定义?我在代码中看不到这一点。我认为您没有在代码中声明
infoData
函数。您是否忘记包含infoData函数的函数定义