菜鸟教程小白 发表于 2022-12-13 07:06:11

php - Ajax 调用在 iPhone 应用程序和 arduino 中不起作用


                                            <p><p>我创建了一个将坐标发送到 URL 的 Arduino 项目。该 URL 执行一些 ajax 调用。在浏览器中它工作正常,但是当我在 Arduino 上尝试它时它不起作用。所以我尝试用 iOS 应用程序做同样的事情,但我遇到了同样的问题。这是 Arduino 和 iOS 应用请求的页面上的代码。</p>

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

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

      for (var type in response) {

            if(response.types == &#39;area&#39;){

                var x = checkInsideCircle(response.longitude, response.latitude, received_data[&#39;longitude&#39;], received_data[&#39;latitude&#39;], response.reach / 1000);

                if(x == false){
                  // Outside
                  error.push(true);
                }else{
                  // Inside
                  error.push(false);
                }
            }else if(response.types == &#39;route&#39;){

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

                  error.push(result);

                  if(error.length == total){

                        if(error.indexOf(false) &gt;= 0){

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

<p>这里是 ajax 请求请求的 handler.php 文件中的代码。</p>

<pre><code>$action = isset($_REQUEST[&#39;action&#39;]) ? $_REQUEST[&#39;action&#39;] : false;

// Switch actions
switch($action) {
    case &#39;get&#39;:
      $callback =&#39;callback&#39;;

      if(isset($_GET[&#39;callback&#39;])){
            $callback = $_GET[&#39;callback&#39;];
      }

      $routes = ORM::for_table(&#39;gps_tracker_route&#39;)
                -&gt;inner_join(&#39;gps_tracker_device&#39;, array(&#39;gps_tracker_device.device_id&#39;, &#39;=&#39;, &#39;gps_tracker_route.device_id&#39;))
                -&gt;where(&#39;gps_tracker_route.device_id&#39;, $_GET[&#39;device_id&#39;])
                -&gt;where(&#39;gps_tracker_device.device_id&#39;, $_GET[&#39;device_id&#39;]);

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

                if($v[&#39;status&#39;] == &#39;on&#39; or strtotime(date(&#39;Y-m-d H:i:s&#39;)) &gt; strtotime($v[&#39;start_time&#39;]) and strtotime(date(&#39;Y-m-d H:i:s&#39;)) &lt; strtotime($v[&#39;end_time&#39;])){
                  $response1[$k] = $v;
                  $response1[$k][&#39;types&#39;] = &#39;route&#39;;
                }
            }
      }

      $area = ORM::for_table(&#39;gps_tracker_area&#39;)
            -&gt;inner_join(&#39;gps_tracker_device&#39;, array(&#39;gps_tracker_device.device_id&#39;, &#39;=&#39;, &#39;gps_tracker_area.device_id&#39;))
            -&gt;where(&#39;gps_tracker_area.device_id&#39;, $_GET[&#39;device_id&#39;])
            -&gt;where(&#39;gps_tracker_device.device_id&#39;, $_GET[&#39;device_id&#39;]);

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

                if($v[&#39;status&#39;] == &#39;on&#39; or strtotime(date(&#39;Y-m-d H:i:s&#39;)) &gt; strtotime($v[&#39;start_time&#39;]) and strtotime(date(&#39;Y-m-d H:i:s&#39;)) &lt; strtotime($v[&#39;end_time&#39;])){
                  $response2[$k] = $v;
                  $response2[$k][&#39;types&#39;] = &#39;area&#39;;
                }
            }
      }

      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(&#39;json_encode&#39;)) {
                  header(&#39;Content-Type: application/json&#39;);

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

      $_GET[&#39;timestamp&#39;] = date(&#34;Y-m-d H:i:s&#34;);

      $record = ORM::for_table(&#39;gps_tracker_device_logging&#39;)-&gt;create($_GET);
      $record-&gt;save();

      $item = ORM::for_table(&#39;gps_tracker_device_logging&#39;)
      -&gt;where(&#39;id&#39;, $record-&gt;id);


      if($item = $item-&gt;find_one()){

            $item = $item-&gt;as_array();

            echo json_encode($item);
      }

    break;
    default:
      die(&#39;invalid call&#39;);
}
</code></pre>

<p>有人可以帮我吗?</p>

<p><strong>编辑</strong></p>

<p>我认为这与 Javascript 有关。我不知道当像Arduino这样的设备向服务器发出http请求时是否可以使用javascript。有人知道吗?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我认为这是因为您需要一个支持 JavaScript 的 Web 浏览器。
我不使用 Arduino,但据我所知,它没有“真正的”Web 浏览器——它只能提取/下载数据,但不能执行 JS 部分。
为了让 JS 工作,你需要一些东西来运行它。这就是它在浏览器中工作的原因。</p></p>
                                   
                                                <p style="font-size: 20px;">关于php - Ajax 调用在 iPhone 应用程序和 arduino 中不起作用,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/30192432/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/30192432/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: php - Ajax 调用在 iPhone 应用程序和 arduino 中不起作用