2015-05-12 81 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文件的代碼,即ajax請求的請求。

$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'); 
} 

有人能幫助我嗎?

編輯

我認爲這是值得的JavaScript。我不知道當Arduino這樣的設備向服務器發送http請求時,是否可以使用javascript。有人知道嗎?

回答

1

我認爲這是因爲你需要一個支持JavaScript的Web瀏覽器。 我不使用Arduino,但從我所知道的它沒有一個「真正的」Web瀏覽器 - 它只能拉/下載數據,但不能執行JS部分。 對於JS的工作,你需要一些東西來運行它。這就是它在瀏覽器中工作的原因。

相關問題