2

次の作業例があります。jquery リクエストを介してhttp://detectlanguage.comを取得しようとしています。これはクロスドメイン リクエストになるため、jsonp を使用しています。

これがMSDNのリンクで、同様のリクエストがあり、それが進むべき道であると推測されますjsonp

ページがエラーをスローすることを除いて、すべて問題ありError: myCallback was not calledません。サーバーから取得した応答は次のとおりです。

{"data":
  {"detections":[
    {"language":"ca",
     "isReliable":false,
     "confidence":0.14992503748125938
    },
    {"language":"en",
     "isReliable":false,
     "confidence":0.00 8103727714748784
    }]
   }
}

私はjsonpに関する回答をstackoverflowで一日中検索してきましたが、まだ機能していません。

どんな助けでも大歓迎です

更新しました

AJAX 呼び出しを含む

$.ajax({
    url: 'http://ws.detectlanguage.com/0.2/detect',
    data: {
        q: $('#hi').val(),
        key:'demo'
    },
    jsonpCallback: 'myCallback',
    dataType: "jsonp",
    success: myCallback,
    error: function(e,i,j){
         $('#results').html(j)
    }
});

私はまた、と呼ばれるJavaScript関数を持っていますmyCallback:

function myCallback(response){
    alert(response.data)
}
4

2 に答える 2

4

応答は jsonp ではないようです。jsonp 応答はjavascriptである必要があります。以下は私のために働くコードです。

ajax リクエスト:

 $.ajax({
            crossDomain: true,
            type:"GET",
            contentType: "application/json; charset=utf-8",
            async:false,
            url: "http://<your service url here>/HelloWorld?callback=?",
            data: {projectID:1},
            dataType: "jsonp",                
            jsonpCallback: 'fnsuccesscallback'
        });

jsonp を返すサーバー側コード (c#):

 public void HelloWorld(int projectID,string callback)
    {

        String s = "Hello World !!";
        StringBuilder sb = new StringBuilder();
        JavaScriptSerializer js = new JavaScriptSerializer();
        sb.Append(callback + "(");
        sb.Append(js.Serialize(s));
        sb.Append(");");
        Context.Response.Clear();
        Context.Response.ContentType = "application/json";
        Context.Response.Write(sb.ToString());
        Context.Response.End();
    }
于 2013-10-17T10:01:12.010 に答える
0

私はまた、応答を求めて SO を探すのに非常に長い時間を費やしています。私にとっての解決策は、ajax 呼び出しや jQuery ではなく、サービスに関係していました。具体的には、web.config の次の設定を使用してクロスドメイン アクセスを許可するようにサービスを設定する必要があります。

<system.serviceModel>
<bindings>
  <webHttpBinding>
    <binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" />
  </webHttpBinding>
</bindings>  

...

  <endpoint address="../YourService.svc"
  binding="webHttpBinding"
  bindingConfiguration="webHttpBindingWithJsonP"
  contract="YourServices.IYourService"
  behaviorConfiguration="webBehavior" />
于 2014-03-24T11:32:11.253 に答える