JQuery кросс-доменная проблема! - PullRequest
0 голосов
/ 14 мая 2011

Я создал службу типа post. Когда я отправляю данные из jquery ajax, он не работает. Метод типа GET работает нормально. Мне нужно с типом сообщения также. Какое решение. Пожалуйста, помогите.

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));
             }
         });

С уважением, гири бхушан

Ответы [ 3 ]

3 голосов
/ 14 мая 2011

междоменные запросы решаются с использованием JSONP. Это эффективный способ обойти модель безопасности браузера. Он работает путем включения удаленного блока сценариев и автоматического выполнения функции обратного вызова, когда все будет готово. Это можно сделать ТОЛЬКО в виде запроса GET

0 голосов
/ 07 марта 2013

в вашем методе обслуживания, который вы вызываете, вставьте эти 4 строки кода в начало функции ниже.

    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 добавьте эту строку перед вашей функцией, как показано ниже.

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

если вам тоже нужен web.config, то здесь

<?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>

0 голосов
/ 14 мая 2011

некоторые СОВЕТЫ: ​​

  • когда вы используете jQuery , тогда нет необходимости получать значение в типичном стиле javascript .
  • JSON.stringyfy () не требуется
  • не использовать DATA в качестве имени переменной, вводит в заблуждение (я думаю, что данные являются зарезервированным ключевым словом для js)

Загружает в блок JSON с использованием JSONP.Добавит дополнительный "? Callback =?"в конце вашего URL, чтобы указать обратный вызов.

здесь я изменил ваш код

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));
             }
         });

ССЫЛКА

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...