2016-07-20 3 views
1

Я пишу тестовое мобильное приложение, используя asp.net, jquery mobile и phonegap. У меня простая форма, в которой вы вводите год и нажмите «Отправить». Вызов Ajax производится на страницу results.aspx.cs на сервере, которая возвращает результат и отображается на 2-й странице.Запрос AJAX, дающий 404 из мобильного приложения

Когда я запускаю мобильное приложение на локальном сервере, я получаю сообщение об ошибке 404 - responseText: «Can not POST /results.aspx.cs/IsLeapYear↵», статус: 404, statusText: «Not Found»}.

index.html страница содержит следующие:

<!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 содержит следующее:

$(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 содержит следующее:

[System.Web.Services.WebMethod] 

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

Может кто-то скажите мне, какую ошибку я делаю?

Джо

+0

Доступен ли ваш сайт через альтернативные средства? Попробуйте использовать HTTP-клиент для проверки заголовка и тела запроса по URL-адресу, это очень полезный инструмент в этих ситуациях. Http://www.swensensoftware.com/im-only-resting – MPaul

+0

Хороший инструмент. Когда я делаю http://169.254.51.156:3000/results.aspx.cs с GET, я получаю статус 200, но с POST я получаю 404 Not Found. Любая идея почему? – citm09

+0

- это его работы в браузере/ –

ответ

0

Пожалуйста, добавьте белый список плагинов в проекте.

cordova plugin add cordova-plugin-whitelist --save 

Это позволит использовать http-запрос в вашем устройстве Android. А также проверить ваш андроида AndroidManifest.xml.It нуждается это разрешение

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

в последний добавить эти строки в config.xml

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

Тогда ваш запрос HTTP будет работать правильно thanks.For дальнейших деталей Пожалуйста, прочтите это Whitelist

+0

Добавил линии и до сих пор не повезло. Такое же сообщение об ошибке. Не удается выполнить POST. – citm09

+0

Установили ли вы белый список плагинов? –

+0

плагин cordova-plugin-whitelist предназначен только для Android и iOS. Он недоступен для Blackberry. Я установил приложение в режиме отладки на BB Z30 и до сих пор не повезло. – citm09

Смежные вопросы