3

我已经使用针对 Andriod 4.12 的 Phonegap+Jquery 构建了一个 html 页面。

我的业务需求是使用 cordova.js 的相机 API 拍摄一张照片,然后将此拍摄的照片发布到 ASMX Web 服务。

问题:当我添加对 Cordova.js 的引用并运行应用程序时,我在 LogCat “未捕获的 ReferenceError:$ 未定义”中收到错误,但如果我删除对 cordova.js 的引用,一切正常,我可以发布数据到 Web 服务。

我附上我的代码以供参考。

<!DOCTYPE html>
<html>  
<head>    
<title>Capture Photo</title>   
<script type="text/javascript" charset="utf-8" src="cordova-2.1.0.js"></script>
<script type="text/javascript" charset="utf-8" src="jquery.js"></script> 

<script type="text/javascript">

 var varType;
 var varUrl;
 var varData;
 var varContentType;
 var varDataType;
 var varProcessData;

  function InsertDetails() {
        alert('Inserting Details');
        varType = "POST";
        varUrl = "http://mobile.comp.com/service/userservice.asmx/InsertDetails";
        varContentType = "application/json; charset=utf-8";
        varDataType = "json";
        varProcessData = true;

        var uname = document.getElementById('txtname');
        var pwd = document.getElementById('txtpwd');
        CallService(uname.value, pwd.value);

        return true;
    }

    //Generic function to call AXMX/WCF  Service        
    function CallService(u, p) {
        $.ajax({ type: varType, url: varUrl, data: '{"username":"' + u + '","password":"' + p + '"}', contentType: varContentType, dataType: varDataType, processdata: varProcessData, success: function (msg) { ServiceSucceeded(msg); }, error: ServiceFailed });
    }

    function ServiceSucceeded(result) {

        var myObject = eval('(' + result.d + ')');
        alert(myObject);
    }
    function ServiceFailed(result) {
        alert('Service call failed: ' + result.status + '' + result.statusText);
        varType = null; varUrl = null; varData = null; varContentType = null; varDataType = null; varProcessData = null;
    } 
</script>
</head>
<body>
<input type=text id=txtname value=John />
<input type=text id=txtpwd value=Doe /> 
<input type="button" id="btnSearch" onclick="InsertDetails();" style="cursor: pointer;
    margin-top: 8px; vertical-align: top" value="Insert Details" />

     <button id=btn1>Capture Photo</button> 

</body>
</html>

请帮我解决这个问题。

4

2 回答 2

3

对类似问题进行一些搜索会显示一些可能的答案。

1) 在本地而不是从 CDN 加载 jQuery。您似乎已经这样做了,但我会为其他有类似问题的人提及它。

在装有 android 3.2 的华硕平板电脑上找不到 jQuery 的 $

2) 告诉 jQuery 允许跨域请求。查看下面链接中的“$.support.cors”和“$.mobile.allowCrossDomainPages”部分。

https://demos.jquerymobile.com/1.2.0/docs/pages/phonegap.html

3) 告诉 jQuery 玩得好。可能是 cordova.js 正在使用另一个想要使用 $ 的 JS 库。由于您首先加载cordova,因此其他JS库在jQuery可以之前要求g $。

http://docs.jquery.com/Using_jQuery_with_Other_Libraries

于 2012-11-20T19:38:48.393 回答
1

感谢尼克的帮助。第三个链接有帮助

最后我的代码工作了

我添加了以下代码行,这对我来说很神奇。

jQuery.noConflict();

之后 JQuery 得到了认可。确保遵循 javascripts 的正确顺序,否则代码将不起作用。

我引用 js 文件的顺序:

  1. 对 JQuery.js 的引用(本地添加到项目中)
  2. jQuery.noConflict();
  3. 服务调用的 Javascript 代码
  4. 参考 Cordova.js
  5. Cordova 相机交互代码
于 2012-11-22T07:41:39.590 回答