2009-12-06 47 views
0

我有一個小書籤,當點擊打開他們當前頁面(例如www.cnn.com)上的div彈出窗口。這個div有一個按鈕,點擊時會向我的應用程序域發出jQuery.get請求。這一切工作正常,但我收到了一個錯誤的答覆。這是發出請求jQuery.get回調不從C#ASP.Net響應發射

function postWishXML(){ 

    jQuery(".ServerResponse").ajaxError(function(event, XMLHttpRequest, ajaxOptions){ 
    //entering here 
    }); 

    var Wish = wishObject(); 

    if(Wish == false) 
    { 
    jQuery('.ServerResponse').html('Please enter a gift title'); 
    jQuery('.GiftText').val(''); 
    }else 
    { 
    jQuery('.ServerResponse').html(''); 
    var WishXML = createXMLTags(Wish); 

    jQuery.get(Root+'/apps/shop/toolbar/WishlistPopup.ashx', 
     {'sap':Cookie,'wish':WishXML}, 
     Response, 
     'text' 
    ); 
    } 

}

這是服務器代碼

public void ProcessRequest (HttpContext context) { 


    if (SecurityContext.IsAuthenticated || SecurityContext.IsSemiAuthenticated) 
    { 

     if (!string.IsNullOrEmpty(context.Request["wish"])) 
     { 
      string res = "Your wish has been added"; 
      context.Response.ContentType = "text/plain"; 
      context.Response.Write(res); 
      context.Response.End(); 

     } 
    } 

是我的問題是與跨域腳本或語法功能?

謝謝

+2

?只是檢查迴應是什麼 – Shawn 2009-12-06 04:13:07

+1

你得到什麼錯誤? – 2009-12-06 04:13:48

+0

我正在使用螢火蟲,'事件'對象'類型'屬性說''ajaxError'這不是真的有幫助 – 2009-12-06 04:27:35

回答

2

我認爲你是對的。看起來你正在碰到一個跨站腳本限制。

請記住,您正在將JavaScript代碼插入到目標網站的代碼中。因此,就像代碼從他們的頁面運行一樣。換句話說,您試圖從頁面內發出AJAX請求(例如www.cnn.com)並從您的站點(另一個域)檢索數據。

我在文章here中找到了一個解決方案。這是要點:

function loadScript(scriptURL) { 
var scriptElem = document.createElement('SCRIPT'); 
scriptElem.setAttribute('language', 'JavaScript'); 
scriptElem.setAttribute('src', scriptURL); 
document.body.appendChild(scriptElem); 
} 

loadScript(Root + '/apps/shop/toolbar/WishlistPopup.ashx'); 

使您的服務器腳本返回將被eval'ed的JavaScript。

第二個可能是更優選的選項是使用JSONP。實質上,您的服務器將使用包裝在命名函數中的JSON數據進行響應。你告訴jQuery.ajax請求你期望得到一個jsonp響應以及返回函數的名字。這幾乎是在做上面的事情,但是在它周圍包裹了更多的安全和語法糖。

這將是PHP版本,但它應該得到重點。假設您需要的所有數據都在$ data中,並且請記住您可以將JSON結構中的匿名函數在成功處理程序中進行評估。

$json = json_encode($data); 
echo $_GET['jsonp_callback'] . '(' . $json . ');'; 

的JavaScript:

$.ajax({ 
    dataType: 'jsonp', 
    jsonp: 'jsonp_callback', 
    url: Root + '/apps/shop/toolbar/WishlistPopup.ashx', 
    success: Response, 
}); 

要給予適當的信貸,我偷了和您使用的螢火蟲從安德魯·摩爾的回答修改此JSONP例如,對於this question

+0

詹姆斯,謝謝。閱讀您提供的JSONP鏈接後,這聽起來像是可行的。我還確認這是一個跨域問題,因爲該應用程序在我的域中工作。 – 2009-12-06 19:43:00

+0

非常好!很高興爲你工作。 – 2009-12-06 22:10:52