2013-03-09 2 views
2

У меня есть форма на «сайте A», которая отправляется на «сайт B». Код приведен ниже.Ajax Post to Controller Action Перекрестный домен

Я не могу получить успешное или обратное сообщение из моего домена назначения.

Любые предложения? Что я делаю не так?

<script type="text/javascript"> 

$.fn.serializeObject = function() 
{ 
    var o = {}; 
    var a = this.serializeArray(); 
    $.each(a, function() { 
     if (o[this.name]) { 
      if (!o[this.name].push) { 
       o[this.name] = [o[this.name]]; 
      } 
      o[this.name].push(this.value || ''); 
     } else { 
      o[this.name] = this.value || ''; 
     } 
    }); 
    return o; 
}; 

$(document).ready(function(){ 
    $("#submit").bind("click", function(){ 

     //turn form into json 
     var formData = $("#digForm").serializeObject(); 
     var jsonData = JSON.stringify(formData); 


     alert(jsonData); 

     $.ajax({ 
      url: URL, 
      data: jsonData, 
      dataType: 'jsonp', 
      cache: false, 
      success: function (data) { 
       alert(data); 
      }, 
      error: function (jqXHR, textStatus, errorThrown) { 
           alert(errorThrown); 
          } 
     }); 
    }) 
}); 
</script> 

Вот контроллер:

[HttpPost] 
public ActionResult Index(string submission) 
{ 
    SubmissionModel model = new SubmissionModel(); 

    //validate everything we need is here 
    var serializer = new JavaScriptSerializer(); 

    // get json data from url 
    var json = submission; 
    var submissionData = serializer.Deserialize<SubmissionModel>(json); 

    model.SiteID = submissionData.SiteID; 
    model.FirstName = submissionData.FirstName; 
    model.LastName = submissionData.LastName; 
    model.Email = submissionData.Email; 
    model.Comments = submissionData.Comments; 
    model.Like = submissionData.Like; 
    model.Dislike = submissionData.Dislike; 
    model.SubmitDate = DateTime.Now; 
    db.Submissions.Add(model); 
    db.SaveChanges(); 

    return View(); 
} 
+0

Что такое сообщение об ошибке? – Mariusz

ответ

1

Необходимо, чтобы сделать это следующим образом:

$.ajax({ 
    url: URL, 
    data: {submission: jsonData}, 
    dataType: 'jsonp', 
    cache: false, 
    success: function (data) { 
     alert(data); 
    }, 
    error: function (jqXHR, textStatus, errorThrown) { 
     alert(errorThrown); 
    } 
}); 
1

вы используете JSON, но для перекрестных сообщений браузера АЯКС вы должны использовать JSONP

http://forums.asp.net/t/1780255.aspx/1

+0

Нет, он не должен использовать jsonp, вы можете отправить данные с json aswell – Mariusz

+0

@Mariusz, пожалуйста, уточните. Если мне не хватает чего-то, что я хотел бы лучше понять. Ответ DaveA кажется неправильным, учитывая поток процесса. – Renaissance

+0

Вы можете отправить json в CORS, разрешив вашему серверу принимать запросы с заголовком OPTIONS [w3] (http://www.w3.org/TR/cors/#cross-origin-request-with-preflight-0) – Mariusz

0

я столкнулся с подобными проблемами в мимо.

С риском преподавательским бабки сосать яйца ....

Во-первых, в отношении диагностики проблемы Я уверен, что это проблема общего происхождения, политики, потому что это результат не получив сообщение об успехе или ошибке, что очень типично. Что вы COULD для того, чтобы его диагностировать, использовать firebug на firefox и посмотреть сами ответы на http/ответы. Там вы WILL см. Ответ, потому что это до того, как он будет отфильтрован браузером.

Относительно решения.

Как сказал Антони, вы CAN использовать jsonp. JsonP на самом деле является хаком, который работает вокруг политики одного и того же происхождения, скрывая данные, как если бы это была функция JS.

Обычно я использую getJson вместо ajax(). http://api.jquery.com/jQuery.getJSON/

И я установил его для использования jsonp вручную, добавив «callback = AnyName» к параметрам сообщения.

Кроме того, я не вижу код ответа вашего сервера B, но данные json должны быть инкапсулированы с помощью AnyName(); поэтому, если ваши данные json являются {json, data}, ваш ответ должен быть AnyName ({json, data});

+0

Как вы добавляете обратный вызов? –

+0

Там: http: //stackoverflow.com/a/6809069/1156491 –