2015-05-12 2 views
2

Я создал проект Arduino, который отправляет координаты URL. URL-адрес выполняет некоторые вызовы ajax. В браузере он отлично работает, но когда я пытаюсь его с Arduino, он не работает. Поэтому я попытался сделать то же самое с приложением iOS, но у меня такая же проблема. Это код на странице, который запрашивает приложение Arduino и iOS.Ajax вызов не работает из приложения iPhone и arduino

var directionsService = new google.maps.DirectionsService(); 
var base_url = window.location; 
var received_data = <?php echo json_encode($received_data); ?>; 

$.ajax({ 
    url: 'http://gps-tracker.domain.nl/_api/handler.php', 
    data: { action: 'post', device_id: received_data['device_id']}, 
    type: 'GET', 
    dataType:"jsonp", 
    jsonp:"callback", 
    success: function (response){ 
     var error = []; 
     var total = response.length; 

     for (var type in response) { 

      if(response[type].types == 'area'){ 

       var x = checkInsideCircle(response[type].longitude, response[type].latitude, received_data['longitude'], received_data['latitude'], response[type].reach/1000); 

       if(x == false){ 
        // Outside 
        error.push(true); 
       }else{ 
        // Inside 
        error.push(false); 
       } 
      }else if(response[type].types == 'route'){ 

       // Check route 
       checkOnRoute(response[type].start_latitude, response[type].start_longitude, response[type].end_latitude, response[type].end_longitude, response[type].type, response[type]['reach'], type, function(result) { 

        error.push(result); 

        if(error.length == total){ 

         if(error.indexOf(false) >= 0){ 

          // Device is inside route or area 
          outside = false; 
         }else{ 
          // Send data to database 
          $.ajax({ 
           url: 'http://gps-tracker.domain.nl/_api/handler.php', 
           data: { action: 'post', device_id: received_data['device_id'], longitude: received_data['longitude'], latitude: received_data['latitude']}, 
           type: 'GET', 
           dataType: 'json', 
           success: function (response){ 
            console.log('good'); 
           },error: function(jq,status,message) { 
            alert('A jQuery error has occurred. Status: ' + status + ' - Message: ' + message); 
           } 
          }); 
         } 
        } 
       }); 
      } 
     } 
    },error: function(jq,status,message) { 
     alert('A jQuery error has occurred. Status: ' + status + ' - Message: ' + message); 
    } 
}); 

Вот код из файла handler.php, что Аякс запросов запроса.

$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : false; 

// Switch actions 
switch($action) { 
    case 'get': 
     $callback ='callback'; 

     if(isset($_GET['callback'])){ 
      $callback = $_GET['callback']; 
     } 

     $routes = ORM::for_table('gps_tracker_route') 
       ->inner_join('gps_tracker_device', array('gps_tracker_device.device_id', '=', 'gps_tracker_route.device_id')) 
       ->where('gps_tracker_route.device_id', $_GET['device_id']) 
       ->where('gps_tracker_device.device_id', $_GET['device_id']); 

     if($routes = $routes->find_many()){ 
      foreach($routes as $k=>$v){ 
       $v = $v->as_array(); 

       if($v['status'] == 'on' or strtotime(date('Y-m-d H:i:s')) > strtotime($v['start_time']) and strtotime(date('Y-m-d H:i:s')) < strtotime($v['end_time'])){ 
        $response1[$k] = $v; 
        $response1[$k]['types'] = 'route'; 
       } 
      } 
     } 

     $area = ORM::for_table('gps_tracker_area') 
      ->inner_join('gps_tracker_device', array('gps_tracker_device.device_id', '=', 'gps_tracker_area.device_id')) 
      ->where('gps_tracker_area.device_id', $_GET['device_id']) 
      ->where('gps_tracker_device.device_id', $_GET['device_id']); 

     if($area = $area->find_many()){ 
      foreach($area as $k=>$v){ 
       $v = $v->as_array(); 

       if($v['status'] == 'on' or strtotime(date('Y-m-d H:i:s')) > strtotime($v['start_time']) and strtotime(date('Y-m-d H:i:s')) < strtotime($v['end_time'])){ 
        $response2[$k] = $v; 
        $response2[$k]['types'] = 'area'; 
       } 
      } 
     } 

     if(isset($response1) and isset($response2)){ 
      $response = array_merge($response1, $response2); 
     }elseif(isset($response1)){ 
      $response = $response1; 
     }else{ 
      $response = $response2; 
     } 

     if (isset($response)) { 

      if (is_array($response)) { 
       if (function_exists('json_encode')) { 
        header('Content-Type: application/json'); 

        echo $callback.'(' . json_encode($response) . ')'; 
       } else { 
        include(ABSOLUTE_PATH . '/classes/json.class.php'); 
        $json = new Services_JSON(); 
        echo $json->encode($response); 
       } 
      } else { 
       echo $response; 
      } 
      exit(0); 
     }else{ 
      exit(); 
     } 
    break; 
    case 'post': 

     $_GET['timestamp'] = date("Y-m-d H:i:s"); 

     $record = ORM::for_table('gps_tracker_device_logging')->create($_GET); 
     $record->save(); 

     $item = ORM::for_table('gps_tracker_device_logging') 
     ->where('id', $record->id); 


     if($item = $item->find_one()){ 

      $item = $item->as_array(); 

      echo json_encode($item); 
     } 

    break; 
    default: 
     die('invalid call'); 
} 

Может кто-нибудь мне помочь?

EDIT

Я думаю, что это что-то с JavaScript. Я не знаю, можно ли использовать javascript, когда устройство, такое как Arduino, делает HTTP-запрос на сервер. Кто-то знает?

ответ

1

Я думаю, что это потому, что вам нужен веб-браузер, поддерживающий JavaScript. Я не работаю с Arduino, но из того, что я знаю, у него нет «реального» веб-браузера - он может только извлекать/загружать данные, но не может выполнить JS-часть. Чтобы JS работал, вам нужно что-то запустить. Вот почему он работает в браузере.

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