Ошибка подключения Ajax от Intex XDK

У меня проблема с подключением к php-странице с помощью Ajax с моего телефона. Я максимально упростил сделку. Код на стороне сервера:

<?php
    echo(json_encode('success'));
?>

Код на стороне клиента:

$.ajax({
           ‘url’: "http://www.skynet.ie/~lobo/test.php",
           ‘success’: function(results){
                   alert(results);                      
           },
           ‘error': function(XMLHttpRequest, textStatus, errorThrown) {
                    alert(JSON.stringify(XMLHttpRequest));
}
});

При тестировании с эмулятора Intel XDK я получаю успешный ответ. Когда я запускаю приложение со своего телефона (IOS), я получаю:

readyState: 0, responseText: "", статус: 0, statusText: "ошибка"

из функции ошибок. я пытался добавить

header('content-type: application/json; charset=utf-8');
header("Access-Control-Allow-Origin: *");

на страницу php безрезультатно. Я установил $.support.cors = true; локально. Я пробовал использовать $.getJSON и почти все варианты ajax, которые мне удавалось найти, которые казались подходящими. Я получаю ответ об успешном подключении к http://time.jsontest.com с телефона и могу получить ответ с моего собственного сайта в эмуляторе. Я действительно не знаю, что может пойти не так, когда я пытаюсь подключиться с телефона к серверу. Я думаю, что любая информация будет принята с благодарностью.

Стивен


person stephen    schedule 08.10.2014    source источник
comment
как вы собираете для ios? или вы используете предварительный просмотр приложений?   -  person krisrak    schedule 08.10.2014
comment
Он запускается через предварительный просмотр приложения.   -  person stephen    schedule 09.10.2014


Ответы (2)


Вы столкнулись с проблемой CORS. Попробуйте следующее:

Чтобы вы могли делать ajax-запросы к чужому веб-сайту в рамках Intel XDK или приложений, созданных XDK, я рекомендую вам добавить скрипт xhr.js в элемент HEAD.

Например,

<!DOCTYPE html><!--HTML5 doctype-->
<html>
<head>
    <title>Your New Application</title>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" />
    <style type="text/css">
        /* Prevent copy paste for all elements except text fields */
        *  { -webkit-user-select:none; -webkit-tap-highlight-color:rgba(255, 255, 255, 0); }
        input, textarea  { -webkit-user-select:text; }
        body { background-color:white; color:black }
    </style>
    <script src='intelxdk.js'></script>
    <script src='xhr.js'></script>
    <script type="text/javascript">
        /* Intel native bridge is available */
        var onDeviceReady=function(){
        //hide splash screen
        intel.xdk.device.hideSplashScreen();
        };
        document.addEventListener("intel.xdk.device.ready",onDeviceReady,false);
    </script>
</head>
<body>
<!-- content goes here-->
    <h2>Hello World</h2>
</body>
</html>

Для получения дополнительной информации о выполнении запросов ajax в Intel XDK перейдите по адресу https://software.intel.com/en-us/html5/articles/how-to-access-JSON-data-in-HTML5-приложения

person eashtianjr    schedule 09.10.2014
comment
Я понимаю, что это, безусловно, похоже на проблему CORS, но я попытался добавить xhr.js и получил точно такой же результат. - person stephen; 10.10.2014

У меня была та же проблема, и я обнаружил это решение на форуме Intel. Похоже, это была ошибка в программном обеспечении Intel XDK, и все новые проекты, созданные из шаблонов, игнорировали вызовы ajax. Я только что импортировал папку www моих проектов в новый проект, и теперь работает вызов ajax. Я знаю, что, вероятно, уже слишком поздно для вас, но, надеюсь, это поможет кому-то еще.

person lejdale    schedule 01.05.2015