2012-05-06 7 views
2

私はC#とWCFで書かれた小さなwebserviceを持っています。クロスドメインjQuery Ajax C#とWFCを使用

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.Web.Script.Services.ScriptService] 
public class Service1 : System.Web.Services.WebService 
{ 
    [WebMethod] 
    public string HelloWorld() 
    { 
     return "Hello Worlds"; 
    } 
} 

私は少しjQueryコードを持っています。

 $.support.cors = true; 

     $.ajax({ 
      type: "POST", 
      url: "http://localhost:61614/Service1.asmx/HelloWorld", 
      data: '{}', 
      dataType: "json", 
      success: function (msg) { 
       alert(0); 
      }, error: function (a, b, c) { alert("Err:" + c); 
      } 
     }); 

これはwebserviceを呼び出します。通話には問題はありませんが、折り返しエラーが発生します。

webserviceは1つのアプリケーション内にあり、Webページは単なるHTMLページです。最終的に、HTMLはPhoneGap内で使用されます。

私はあらゆることを試みました。

contentType: "application/json; charset=utf-8",に追加すると、呼び出しが失敗します。 dataType: 'jsonp"を使用すると、呼び出しが失敗します。

基本的に、上記のコードではWSが呼び出されますが、返されるとエラーが発生します。

ウェブサービスからJSONオブジェクトを返す必要があり、Safariで動作する必要があります。

誰かがJSONP呼び出しの完全なサンプルコードを持っていますか? jQuery getJSONから

+0

もしそれが役立つかわからないhttp://www.codeproject.com/Articles/186235/Making-a-JSONP-Call-to-a-WCF-Data-Service-using-da –

+0

@griegs - http:// localhost:61614/Service1.asmx/HelloWorld?callback = testがあなたのブラウザーで 'test({'say': 'HelloWorld'});'のようなJavaScript関数を返すようにしてください。あなたがそうするまで、jsonpリクエストは成功しません。これはアドレスバーでテストできます。お役に立てれば。 – jmort253

+0

明確にすることが1つです。あなたがライブに行くと、ドメイン間でリクエストを行っていることを100%確信していますか?同じドメインの場合は、パディング/ラッパー機能を使用せずにJSONを返すことができます。 – jmort253

答えて

0

URLが文字列が含まれている場合、 "コールバックを=?" (または、サーバー側APIで定義されているように)、要求は代わりにJSONPとして処理されます。詳細については、$ .ajax()のjsonpデータ型の説明を参照してください。

リクエストをJSONPリクエストとして処理するには、URLにcallback=?を含める必要があります。これは、jQueryにコールバック関数を作成し、その関数の名前をコールバックパラメータとしてサーバーに渡すように指示します。

サーバーサイドコードでは、メソッドは、JSONコードをラップまたはパディングして、クエリ文字列のコールバックパラメータとして渡されたJavaScript関数の名前で返します。

本質的に、JavaScriptをクライアントブラウザに返すことです。これは即座に実行され、ページのコンテキストで既に定義されている関数を呼び出します。

はJavaScript:

$.getJSON("http://localhost:61614/Service1.asmx/HelloWorld?callback=?", 
    function(data) { 

     // alert raw JSON data 
     alert(JSON.stringify(data)); 

     // access the "say" property and alert it 
     alert(data.say); 
    } 
); 

サーバー側:

これは、サーバー側で行う必要があると思います何の粗製のバージョンです:

// get the callback parameter value and assign to the String callback 
... 
return callback + "({ 'say' : 'HelloWorld' });"; 

また、技術的フードの下で起こっていることの説明:

これは今日知っておくべきことではありませんが、jQueryがJSONPをどのように実装しているかを理解するのに役立ちます。

これは、次のようになります何かに評価されます。jquery43214321432143242はあなたの成功コールバック関数に指定されたランダムな名前です

return "jquery43214321432143242({'say':'HelloWorld'});" 

。繰り返しになりますが、返されたテキストはtext/javascriptを使用して返されるため、すぐに実行され、{'say':'HelloWorld'}オブジェクトをパラメータとして関数に渡します。

出力結果は、raw JSONを表すアラートメッセージと、.sayプロパティからプルされた単語 "HelloWorld"です。

+0

jmort253、これは何らかの理由でWebサービスを呼び出すことがまだありません。 – griegs

+0

ブラウザでhttp:// localhost:61614/Service1.asmx/HelloWorld?callback = test return 'test({'say': 'HelloWorld'});を実行しますか?そうでない場合は、それが最初のステップです。それは基本的に動的に生成されたテキスト/ javascriptです。まずそれを試してください。 – jmort253

+0

もっと複雑なJSONPの例ですが、ブラウザでURLを入力する際に​​何が必要なのかを理解しておく必要があります。 JSONオブジェクトが "test"という関数でどのようにラップされているかに注目してください:http://search.twitter.com/search.json?q=blue%20angels&rpp=5&include_entities=true&result_type=mixed&callback=test – jmort253

関連する問題