2011-05-14 3 views
0

나는 post 형식의 서비스를 만들었습니다. jquery ajax에서 데이터를 보내고 있습니다. 작동하지 않습니다. GET이 잘 작동합니다. 게시물 유형도 필요합니다. 해결책은 무엇입니까? 제발 도와주세요.jquery 도메인 간 문제!

var user = document.getElementById("uname").value; 
     var pass = document.getElementById("pass").value; 
     var utyp = document.getElementById("usertyp").value; 
     // alert("hi"+pass); 

     var dat = { "uname": user, "pwd": pass, "utype": utyp }; 

     Data = JSON.stringify(dat); 





    $.ajax({ 
      url: "http://192.168.1.9:450/Service.svc/Login_Insert", 
      type: "POST", 
      data:Data, 
      contentType: "application/json; charset=utf-8", 
      dataType: "jsonp", 
      processdata: true, 
      success: function res(msg) { 
       alert("hello" + msg); 
      }, 
      error: function error(response) { 

       alert("error"); 
       alert(response.responseText); 
       alert(JSON.stringify(response)); 
      } 
     }); 

감사 기리 Bhushan

+0

입니다. – check123

+0

@GIRI, 코드 게시 ... – kobe

+0

지금 확인하십시오. – user601367

답변

3

크로스 도메인 요청 JSONP를 사용하여 해결된다. 이는 사실상 브라우저 보안 모델을 해결하기위한 해킹입니다. 원격 스크립트 블록을 포함하고 준비가되면 콜백 함수를 자동 실행하여 작동합니다. 이것은 오직 GET 요청으로

0

몇 가지 팁을 수행 할 수 있습니다

  • u는 전형적인 자바 스크립트 스타일로 값을 얻기 위해 다음 필요를 jQuery를을 사용하지 r에

    .
  • JSON.stringyfy는() JSONP를 사용하여 JSON 블록에

로드가 (내가 데이터 JS에 대한 키워드를 예약되어 생각)

  • 는 변수 이름으로 사용 데이터를 해달라고 오해의 소지가 필요하지 않습니다. 추가 "? 콜백 =?" URL의 끝에 추가하여 콜백을 지정하십시오.
  • 여기 난 당신이 아래 함수의 시작 코드의이 4 개 개의 라인을 삽입, 호출 서비스 방식으로 코드

    var user = $("#uname").val(); 
    var pass = $("#pass").val(); 
    var utyp = $("#usertyp").val(); 
    var userData = { "uname": user, "pwd": pass, "utype": utyp }; 
    $.ajax({ 
          url: "http://192.168.1.9:450/Service.svc/Login_Insert?callback=?", 
          type: "POST", 
          data:userData,   
          crossDomain:true 
          contentType: "application/json; charset=utf-8", 
          dataType: "jsonp", 
          processdata: true, 
          success: function res(msg) { 
           alert("hello" + msg); 
          }, 
          error: function error(response) { 
           alert("error"); 
           alert(response.responseText); 
           alert(JSON.stringify(response)); 
          } 
         }); 
    

    REFERENCE

    0

    를 수정했습니다.

    public string GetEmployee(string id, string name, string email) 
        { 
         WebOperationContext.Current.OutgoingResponse.Headers.Add(
          "Access-Control-Allow-Origin", "*"); WebOperationContext.Current.OutgoingResponse.Headers.Add(
          "Access-Control-Allow-Methods", "GET"); WebOperationContext.Current.OutgoingResponse.Headers.Add(
          "Access-Control-Allow-Headers", "Content-Type, Accept"); 
         Employee employee = new Employee(); 
         employee.TRGEmpID = id; 
         employee.First_Name = name; 
         employee.Email = email; 
         EmployeeManagement empMgmt = new EmployeeManagement(); 
         var json = new JavaScriptSerializer().Serialize(empMgmt.Search(employee).FirstOrDefault()); 
         return json; 
        } 
    

    또한, svc 파일에 다음과 같은 기능을 추가하십시오. 당신이 너무 Web.config를 필요하면 당신이 여기에 코드 샘플을 게시하지 않는 이유는

     [OperationContract] 
        [WebInvoke(Method = "GET", 
         ResponseFormat = WebMessageFormat.Json, 
         RequestFormat = WebMessageFormat.Json, 
         BodyStyle = WebMessageBodyStyle.Bare)] 
        string GetEmployees(string name); 
    

    , 여기가

    <?xml version="1.0"?> 
    

    <system.web> 
        <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 
    <system.serviceModel> 
        <services> 
         <service name="EmployeeService.EmployeeSearchService" behaviorConfiguration="DefaultServiceBehavior"> 
          <endpoint binding="webHttpBinding" contract="EmployeeService.IEmployeeSearchService"  behaviorConfiguration="DefaultEPBehavior" /> 
         </service> 
        </services> 
        <behaviors> 
         <endpointBehaviors> 
          <behavior name="DefaultEPBehavior"> 
           <webHttp /> 
          </behavior> 
         </endpointBehaviors> 
         <serviceBehaviors> 
          <behavior name="DefaultServiceBehavior"> 
           <serviceMetadata httpGetEnabled="true" /> 
           <serviceDebug includeExceptionDetailInFaults="true" /> 
          </behavior> 
         </serviceBehaviors> 
        </behaviors> 
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
    <system.webServer> 
        <modules runAllManagedModulesForAllRequests="true"/> 
        <!-- 
        To browse web app root directory during debugging, set the value below to true. 
        Set to false before deployment to avoid disclosing web app folder information. 
        --> 
        <directoryBrowse enabled="true"/> 
    </system.webServer>