2016-07-20 13 views
1

Ich schreibe eine Test-Mobile-App mit asp.net, jquery mobile und phonegap. Ich habe ein einfaches Formular, in dem Sie ein Jahr eingeben und auf "Senden" klicken. Der Ajax-Aufruf erfolgt auf der Seite results.aspx.cs auf dem Server, der das Ergebnis zurückgibt und auf der zweiten Seite angezeigt wird.AJAX-Anfrage geben 404 von mobilen App

Wenn ich mobile App auf dem lokalen Server ausführen bekomme ich 404 Fehler - responseText: "Kann nicht POST /results.aspx.cs/IsLeapYear↵", Status: 404, statusText: "Not Found"}.

index.html-Seite enthält die folgenden:

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8" /> 
<meta name="format-detection" content="telephone=no" /> 
<meta name="msapplication-tap-highlight" content="no" /> 
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width" /> 
<link rel="stylesheet" href="css/jquery.mobile-1.4.5.min.css"> 
<link rel="stylesheet" href="css/jqm-icon-pack-fa.css"> 
<link rel="stylesheet" type="text/css" href="css/index.css" /> 
<script src="js/jquery-2.1.3.min.js" type="text/javascript"></script> 
<script src="js/jquery.mobile-1.4.5.min.js" type="text/javascript"></script> 
<script> 
    var SectedCityCode, URL, prov; 
    $(document).bind('mobileinit', function() { 
     $.mobile.pushStateEnabled = false; 
    }); 
</script> 
<title>Hello World</title> 
</head> 
<body> 
<!-- Start of first page --> 
<div data-role="page" id="home"> 

    <div data-role="header"> 
     <h1>Test</h1> 
    </div> 

    <div data-role="content"> 
     <div data-role="main" class="ui-content"> 
      <div class="ui-body ui-body-a ui-corner-all"> 
       <form id="checkyear" class="ui-body ui-body-a ui-corner-all" data-ajax="false"> 
        <label for="txtYear">Enter the year:</label> 
        <input type="text" name="txtYear" id="txtYear" value="" /> 
        <input type="button" data-theme="b" name="submit" id="submit" value="Submit"> 
       </form> 
      </div> 
     </div> 

    </div> 

    <div data-role="footer" data-position="fixed"> 
     <h4>Page footer</h4> 
    </div> 
</div> 
<!-- end of first page --> 
<!-- start of second page --> 
<div data-role="page" id="second"> 
    <div data-theme="a" data-role="header"> 
     <h3>Welcome Page</h3> 
    </div> 

    <div data-role="content"> 
     <p id="result"></p> 
    </div> 

    <div data-theme="a" data-role="footer" data-position="fixed"> 
     <h3>Page footer</h3> 
    </div> 
</div> 
<!-- end of second page --> 
<script type="text/javascript" src="js/index.js"></script> 
</body> 
</html> 

index.js enthält folgende Komponenten:

$(document).on('pageinit', '#home', function() { 
$(document).on('click', '#submit', function() { // catch the form's submit event 
    if ($('#txtYear').val().length > 0) { 
     $.ajax({ 
      url: 'http://website.com/results.aspx.cs/IsLeapYear', 
      data: '{ year: "' + txtYear.value + '"}', 
      type: 'post', 
      async: 'true', 
      dataType: 'json', 
      success: function (result) { 
       if (result.status) { 
        result.val = "Leap Year"; 
        $.mobile.changePage("#second"); 
       } else { 
        result.val = "Not a Leap Year";       
       } 
      }, 
      error: function (request, error) {      
       // This callback function will trigger on unsuccessful action     
       alert('Network error has occurred please try again!'); 
      } 
     }); 
    } else { 
     alert('Please fill all necessary fields'); 
    } 
    return false; // cancel original event to prevent form submitting 
}); 
}); 

results.aspx.cs enthält folgende:

[System.Web.Services.WebMethod] 

public static bool IsLeapYear(int year) 
{ 
    return DateTime.IsLeapYear(year); 
} 

Kann jemand Sag mir, welchen Fehler mache ich?

Joe

+0

Ist Ihre Website auf andere Weise zugänglich? Versuchen Sie, einen HTTP-Client zu verwenden, um Ihre Anfrage Header und Körper an Ihrer URL zu testen, das ist ein sehr hilfreiches Werkzeug in diesen Situationen http://www.sensensoftware.com/im-only-resting – MPaul

+0

Nice tool. Wenn ich http://169.254.51.156:3000/results.aspx.cs mit GET mache, bekomme ich Status 200 OK, aber mit POST bekomme ich 404 Not Found. Irgendeine Idee warum? – citm09

+0

ist es funktioniert in browser/ –

Antwort

0

Bitte fügen Sie Whitelist-Plugin in Ihrem Projekt.

cordova plugin add cordova-plugin-whitelist --save 

Das wird HTTP-Anfrage in Ihrem Android-Gerät ermöglichen. Und überprüfen Sie auch Ihr Android AndroidManifest.xml.It diese Berechtigung

<uses-permission android:name="android.permission.INTERNET" /> 

im letzten braucht fügen Sie diese Zeilen in Ihrer config.xml

<access origin="*"/> 
<allow-intent href="*"/> 
<allow-navigation href="*"/> 

dann Ihre HTTP-Anforderung funktioniert richtig thanks.For weitere Details Bitte lesen Sie diese Whitelist

+0

Hinzugefügt die Zeilen und immer noch kein Glück. Gleiche Fehlermeldung. Kann nicht POST machen. – citm09

+0

Haben Sie die Plugin-Whitelist installiert? –

+0

Cordova-Plugin-Whitelist-Plugin ist nur für Android und iOS. Es ist nicht für Blackberry verfügbar. Ich habe die App im Debug-Modus auf BB Z30 installiert und immer noch kein Glück. – citm09

Verwandte Themen