0

私は、ある Web サイトが Windows フォーム アプリケーションにコマンドを送信する大学向けのプロジェクトを行っています。このアプリケーションは、シリアル ポートへのアクセスとコマンドの送受信を担当します。

Web サイトと Windows フォーム アプリケーション間の通信には、Web Api を使用しましたが、公開後に試聴したところ、localhost が C# WebSite であることがわかりました。私の Windows Forms アプリケーションではなく、Net 自身のサイトです。

Web Api への呼び出しを、コントローラーではなく Ajax を直接使用するように変更しました。私が見つけた例では、JSONP を使用していることがわかりましたが、結果を読み取って自分の Web サイトで使用することはできません。

Chrome で表示される呼び出しコードと戻り値は次のとおりです。

function cmdLocal() {
    $.ajax({
        type: "GET",
        dataType: "jsonp",
        url: "http://local host:8089/api/gps/",
        jsonpCallback: "cmdTorre",
        jsonp: "cmdTorre"
    });             
}

function cmdTorre(data) {
    alert(data);
}

応答ヘッダー

Content-Length:10
Content-Type:application/json; charset=utf-8
Date:Tue, 10 Jun 2014 11:18:30 GMT
Server:Microsoft-HTTPAPI/2.0

応答

No Properties

Windows フォーム API コントローラー

namespace TCCWindows.Lib
{
    public class GPSController : ApiController
    {
        [HttpGet]
        public string Posicao()
        {
            var coordenada = TCCWindows.FormPrincipal.PegarCoordenadas();
            return coordenada.Latitude + "|" + coordenada.Longitude + "|" + coordenada.Altitude;
        }
    }
}
4

1 に答える 1

0

まず、ajax 呼び出しが非常に複雑に見えますが、次のように置き換えてみてください。

function cmdLocal() {
    $.ajax({
        type: "GET",
        dataType: "jsonp",
        url: "http://local host:8089/api/gps/",
        success: cmdTorre,
        error: function(err){
           alert("You have a error"+err);
        }
    });             
}

function cmdTorre(data) {
    alert(data);
}

新しいコードを慎重に検証してください。ここに入力しただけなので、エラーが発生する可能性があります。この時点でこれを実行すると、おそらくエラー メッセージが表示されるはずです。これはGPSController、有効な JSONP (または JSON) を返していないように見えるためです。詳細については JSONP を参照してください。ただし、return ステートメントを次のように変更すると、機能するはずです。コントローラーが実際に呼び出され、ネットワークが機能していると仮定します。

 return "cmdTorre({\"lat\":"+coordenada.Latitude+" , \"lon\":"+coordenada.Longitude+" });" 

基本的に、コンソールに出力すると、戻り文字列は次のようになります。

function cmdTorre({
    "lat": 23.34,
    "lon":34.23,
    "alt":50
});

繰り返しますが、ここに入力したばかりなので、構文の問題について書いたコードを確認することをお勧めしますが、アイデアが得られるはずです。

したがって、問題は次のとおりです。

  1. 生成している戻り文字列は JSON 形式ではありません
  2. また、関数呼び出しにラップされていないため、JSONP も無効になります。

最後に、私のソリューションではコードが機能し、JSONP が開始されるはずですが、それは正しい方法ではありません。それはもっと醜いハックです。GPS コントローラーは、呼び出されたパラメーターの HTTP 要求を読み取る必要があります'callback'。これは、JSONP 呼び出しで受け入れられている規則です。次に、return ステートメントで関数名をハードコーディングする代わりに、このコールバック パラメーターの値を使用する必要があります。次に、jQuery で「cmdTorre」のような特定の関数を使用する必要はありません。代わりに、次のような匿名機能が問題なく機能success:function(response){...}します。

それが役立つことを願っています。

于 2013-06-11T01:06:18.023 に答える