2013-03-09 36 views
2

我有一個「網站A」的表格發佈到「網站B」。代碼包括在下面。阿賈克斯發佈到控制器的行動跨域

我無法從我的目標域中獲得成功或返回消息。

有什麼建議嗎?我究竟做錯了什麼?

<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 2013-03-09 16:43:53

回答

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但對於跨瀏覽器的AJAX的職位,你應該使用JSONP

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

+0

不,他沒有使用jsonp,你可以發送數據與json以及 – Mariusz 2013-03-09 17:08:37

+0

@Mariusz,請詳細說明。如果我錯過了一些我想更好理解的東西。考慮到流程流程,DaveA的答案似乎是錯誤的。 – Renaissance 2013-03-09 17:10:28

+0

你可以在CORS中發送json,讓你的服務器接受帶OPTIONS頭的請求[w3](http://www.w3.org/TR/cors/#cross-origin-request-with-preflight-0) – Mariusz 2013-03-09 17:14:23

0

我跑進了類似的問題過去。

帶教奶奶班門弄斧風險....

首先,關於這個問題的診斷 我敢肯定這是一個相同來源政策問題,因爲這些結果是沒有得到成功或錯誤消息,這是非常典型的。 你爲什麼要診斷它,就是在firefox上使用firebug,並且自己查看http請求/響應。在那裏你看到的迴應,因爲這是它被瀏覽器過濾出來之前。

關於解決方案。

像安東尼說的,你CAN使用jsonp。 JsonP實際上是一種通過隱藏數據就像是JS函數一樣圍繞同源策略工作的黑客技術。

我通常使用getJson代替ajax()。 http://api.jquery.com/jQuery.getJSON/

我將它設置爲手動使用jsonp,通過在post參數中添加「callback = AnyName」。另外,我看不到你的服務器B的響應代碼,但是JSON數據需要用AnyName()封裝;所以如果你的json數據是{json,data},你的響應應該是AnyName({json,data});

+0

你如何添加回調? – 2013-03-20 16:52:53

+0

有:http://stackoverflow.com/a/6809069/1156491 – 2013-05-09 00:54:46