2016-04-13 18 views
0

jqueryとasp.net Webサービスを使用してクロスドメインWebサービスを接続しようとしています。私はこれを接続しようとしているときに私はerrorメッセージを受け取り、これは同じlocalhostにあるときにうまくいきます。しかし、私は彼らが別のローカルホストや別の投稿にあるときに出力を得たい、つまり、私は1つのマシンに私のコードをホストし、Webサービスは別のマシンに入れたい。 ここに私のコードです。javascriptとjqueryを使用してasp.netのクロスドメインWebサービスを呼び出す方法

$.ajax({ 
      type: "POST", 
       contentType: "application/json; charset=utf-8", 
       url: "http://***.***.**.***/latlangs.asmx/Get_Lat_Longs",     
       crossDomain: true, 
       async: true,      
       data: "{ }", 
       dataType: "json",     
       success: function(data) {      
        alert("Success");      
        }, 
       error: function(err) { 
        alert(err.statusText); 
       } 
      }); 

、ここでは、私のWebサービスメソッドまたはの.asmxページ

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Services; 
using System.Data.SqlClient; 
using System.Data; 
using System.Web.Script.Serialization; 
using System.Web.Script.Services; 


[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.Web.Script.Services.ScriptService] 
public class LatLongs : System.Web.Services.WebService { 

string con = @"Data Source=SERVER\QTTS;Initial Catalog=asdf;User ID=sa;Password=*****"; 


[WebMethod] 
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] 
public string Get_Lat_Long_Values() 
{ 
    try 
    { 
     string stri = @"SELECT MAX(id) AS Expr1 FROM Temp_lat_long_values"; 
     SqlDataAdapter daa = new SqlDataAdapter(stri, con); 
     DataTable dt = new DataTable(); 
     daa.Fill(dt); 
     if (dt.Rows.Count > 0) 
     { 
      int id = Convert.ToInt32(dt.Rows[0][0].ToString()); 
      stri = @"SELECT x,y,id from Temp_lat_long_values where id='" + id + "'"; 
      daa = new SqlDataAdapter(stri, con); 
      DataTable dt1 = new DataTable(); 
      daa.Fill(dt1); 
      if (dt1.Rows.Count > 0) 
      { 
       dt1.TableName = "Values"; 
       DataSet ds = new DataSet(); 
       ds.Tables.Add(dt1); 
       string daresult = DataSetToJSON(ds); 
       return daresult; 
      } 
      else 
      { 
       return "No data Found"; 
      } 
     } 
     else 
     { 
      return "No data found"; 
     } 
    } 
    catch (Exception e) 
    { 
     return e.Message; 
    } 
} 

public string DataSetToJSON(DataSet ds) 
{ 
    Dictionary<string, object> dict = new Dictionary<string, object>(); 
    foreach (DataTable dt in ds.Tables) 
    { 
     object[] arr = new object[1]; 
     for (int i = 0; i <= dt.Rows.Count - 1; i++) 
     {     
      arr[0] = dt.Rows[i].ItemArray; 
     } 
     dict.Add(dt.TableName, arr); 
    } 
    JavaScriptSerializer json = new JavaScriptSerializer(); 
    return json.Serialize(dict); 
} 

} JSONPによって解決することができ

答えて

0

あなたの問題です。

「JSON with Padding」(JSONはJavaScript Object Notationの略)を表すJSONPは、CORS(クロス・ソース・リソース共有)ルールをバイパスする別のドメインからデータを取得する方法です。 CORSは、クライアントとは異なるドメイン名を持つサイト間でデータを転送する一連の「ルール」です。 JSONPの使用状況の

サンプル:

$.ajax({ 
    url: "http://***.***.**.***/latlangs.asmx/Get_Lat_Longs", 
    type: "POST", 
    data: "{ }", 
    dataType: "jsonp", 
    jsonpCallback: "localJsonpCallback" 
}); 

function localJsonpCallback(json) { 
    //You can process response from here. 
} 

だから、あなたはあなたのケースでは、上記と同じJSONPを使用することができます。

+0

タンクqダルシャンジャイン。私はあなたが何もlocalJsonpCallbackメソッドに行っていないイベントコントロールを取得didntは言ったように私はコードを更新しました。あなたはこの問題を出すのを助けることができます –

+0

@KrishnaMohan、詳細については、このリンクを確認することができますhttp://stackoverflow.com/questions/14221429/how-can-i-produce-jsonp-from-an-asp -net-web-service-for-cross-domain-callsまだ問題がある場合は教えてください。 –

+0

私はあなたの例を使って何も得られませんでした。エラー機能に入っていない場合でも、以下のコードを見つけてください –

関連する問題