0

jquery.mobile-1.1.1 jquery-1.7.2.min cordorva-1.9.0

私はこれを始めたばかりで、今から 1 週間それをいじっています...そこにあるすべての記事を読み、考えられるすべての組み合わせを試しましたが、まだ何も機能していません。最後の手段として、これを phonegap から実際のブラウザ ページに移動したところ、未定義のエラーが発生しました。

// if these are NOT set I get the "NO Transport" error
$.support.cors = true;
$.mobile.allowCrossDomainPages = true;

// however, with the above defined (true), the following is the error:
// xhr.statusText = "error"
// textStatus = "error"
// errorThrown.message = "Access Denied"


function login(username, password)
{
  var serviceURL = "http://mobile.mydomain.com/";
  var strData = "username="+username +"&password="+password;

  // setup the paramaters for the ajax call
  var ajaxParams = {  
      type: 'POST',
      url: serviceURL + 'mypage.php',
      data: strData,
      datatype: 'json',
      success: function(xmlData, textStatus, xhr) { onLoginOK(xmlData, textStatus, xhr) },
      error: function(xhr, textStatus, errorThrown) { 
                      onLoginFailure(xhr, textStatus, errorThrown) },
      timeout: 5000,
      cache: false
  };

  // make the ajax call
  $.ajax(ajaxParams);
}

function onLoginOK(data, textStatus)
{
  // probably not right but haven't gotten this far!
  var what = jQuery.parseJSON(data); 

  alert("Login results: " + data); 
  if(what.status == "OK")
  {
    localStorage.setItem("door", what.username);
    localStorage.setItem("knock", what.password);
    localStorage.setItem("house", what.userid);
  }
  else if(what.status == "FAILED")
  {
      alert("Login failed: " +what.text);
  }
}

function onLoginFailure(xhr, textStatus, errorThrown)
{
  alert("There was an error: The server reported: " + xhr.responseText 
        +"\nstatus: " +textStatus 
        + "\nerror: " +errorThrown);
}

cordova.xml 内で、次の方法でドメインへのアクセスを許可しました。

<access origin="http://mobile.mydomain.com" subdomains="true "/> 

誰にも提案はありますか?

================================================== ====================== これは日食からのものです:

07-27 09:12:16.612: I/dalvikvm(1295): Could not find method android.webkit.WebView.<init>, referenced from method org.apache.cordova.CordovaWebView.<init>
07-27 09:12:16.612: W/dalvikvm(1295): VFY: unable to resolve direct method 3116: Landroid/webkit/WebView;.<init> (Landroid/content/Context;Landroid/util/AttributeSet;IZ)V
07-27 09:12:17.339: I/webviewdatabase(1295): openOrCreateDatabase1
07-27 09:12:17.362: I/CordovaLog(1295): Changing log level to DEBUG(3)
07-27 09:12:17.362: I/CordovaLog(1295): Found preference for useBrowserHistory=false
07-27 09:12:17.378: E/dalvikvm(1295): Could not find class 'android.webkit.WebResourceResponse', referenced from method org.apache.cordova.CordovaWebViewClient.generateWebResourceResponse
07-27 09:12:17.378: W/dalvikvm(1295): VFY: unable to resolve new-instance 451 (Landroid/webkit/WebResourceResponse;) in Lorg/apache/cordova/CordovaWebViewClient;
07-27 09:12:17.378: W/dalvikvm(1295): VFY: unable to find class referenced in signature (Landroid/webkit/WebResourceResponse;)
07-27 09:12:17.386: W/dalvikvm(1295): VFY: unable to find class referenced in signature (Landroid/webkit/WebResourceResponse;)
07-27 09:12:17.386: W/dalvikvm(1295): VFY: unable to find class referenced in signature (Landroid/webkit/WebResourceResponse;)
07-27 09:12:17.386: I/dalvikvm(1295): Could not find method android.webkit.WebViewClient.shouldInterceptRequest, referenced from method org.apache.cordova.CordovaWebViewClient.shouldInterceptRequest
07-27 09:12:17.386: W/dalvikvm(1295): VFY: unable to resolve virtual method 3127: Landroid/webkit/WebViewClient;.shouldInterceptRequest (Landroid/webkit/WebView;Ljava/lang/String;)Landroid/webkit/WebResourceResponse;
07-27 09:12:19.706: W/dalvikvm(1295): No implementation found for native Lcom/carrieriq/iqagent/client/NativeClient;.clientInit (Ljava/lang/Object;)I
07-27 09:12:21.979: I/Database(1295): sqlite returned: error code = 14, msg = cannot open file at source line 25467
07-27 09:12:22.198: I/Web Console(1295): Error: SyntaxError: Unexpected token ILLEGAL at file:///android_asset/www/cordova-1.9.0.js:1012
07-27 09:12:22.347: I/Flex(1295): loadOperatorCode() strOp is AT&T
07-27 09:12:22.347: I/Flex(1295): loadOperatorCode() strMccList is 
07-27 09:12:22.347: I/Flex(1295): loadOperatorCode() cr.query strMCC strMNC 
07-27 09:12:22.354: I/Flex(1295): loadOperatorCode() mOperatorIndex ==> 1
07-27 09:12:24.167: I/Web Console(1295): **Error** initializing Network Connection: Class not found at file:///android_asset/www/cordova-1.9.0.js:5317
07-27 09:12:26.854: I/Web Console(1295): **JSCallback Error:** Request failed. at file:///android_asset/www/cordova-1.9.0.js:3747
07-27 09:12:28.331: I/Database(1295): sqlite returned: error code = 14, msg = cannot open file at source line 25467
07-27 09:12:28.347: I/Web Console(1295): **Error:** SyntaxError: Unexpected token ILLEGAL at file:///android_asset/www/cordova-1.9.0.js:1012
07-27 09:12:28.386: I/Web Console(1295): **Error** initializing Network Connection: Class not found at file:///android_asset/www/cordova-1.9.0.js:5317
4

2 に答える 2

4

まず、cordova または JQM スクリプトを追加する前に、これらを追加する必要があります。

<script type="text/javascript">
$(document).bind("mobileinit", function() {
    $.support.cors = true;
    $.mobile.allowCrossDomainPages = true;
});
</script>

次に、このような ajax リクエストを行う必要があります

$
.ajax({
    cache : false,
    type : 'POST',//While GET working
    async: false,
    url : "http://192.168.1.100/something.xml" + "?time=" + Date.now(),
    data : {
        key : "value"
        },
    dataType : "xml",
    success : function(xml) {
            },
    error : function(xhr, ajaxOptions, thrownError) {
        alert(xhr.status);
        alert(thrownError);
    }
});

これがうまくいかない場合は、XMLHttpRequest

var req = new XMLHttpRequest();
req.open("POST", "http://192.168.1.100/something.JPG", true);
req.setRequestHeader("Content-type", "image/jpg");

req.onreadystatechange = function() {
    if (req.readyState == 4) {
        if (req.status == 200) {
            var data = req.responseText;
        }
    }
};
req.send(null);
于 2012-07-27T06:07:01.497 に答える
0

どのようなエラーが表示されますか? FireBug または IE Developer Tools からのリクエストとレスポンスのテキストを投稿できますか?

あなたのコードを見ると、まだ試していない場合に試すことができるアイデアがいくつかあります。

1) contentType を指定します。

 contentType: "application/json; charset=utf-8" // <-- or whatever contentType

2) mypage.php がリクエストの本文にユーザー名とパスワードを期待している場合は、strData を json に変更してみてください。

strData = {
     username:username, password:password
}

3) および/または mypage.php がオブジェクトまたは文字列を期待するかどうかに応じて文字列化する

JSON.stringify(strData);

また、ハンドラーには匿名ハンドラー関数とまったく同じパラメーターがあるため、次のように置き換えることができます。

success: function(xmlData, textStatus, xhr) {
         onLoginOK(xmlData, textStatus, xhr) 
},
error: function(xhr, textStatus, errorThrown) { 
       onLoginFailure(xhr, textStatus, errorThrown) 
},

直接代入で:

success: onLoginOK,
error: onLoginFailure,

これにより、バグの可能性のある原因を取り除くことで、デバッグが少し簡単になります。

結果のコードは次のようになります...

function login(username, password)
{
    var serviceURL = "http://mobile.mydomain.com/";
    var strData = JSON.stringify({
        username:username, password:password
    });

  // setup the paramaters for the ajax call
  var ajaxParams = {  
      type: 'POST',
      url: serviceURL + 'mypage.php',
      data: strData,
      datatype: 'json',
      contentType: "application/json; charset=utf-8" // <-- or whatever contentType 
      success: onLoginOK,
      error: onLoginFailure,
      timeout: 5000,
      cache: false
  };

  // make the ajax call
  $.ajax(ajaxParams);
}

リクエストとレスポンスのテキストを見ると本当に役に立ちます。上記のいずれも役に立たない場合は、返信に添付していただけますか?

于 2012-07-26T22:21:35.663 に答える