jQuery.get回调没有从C#ASP.Net响应中触发

时间:2009-12-06 04:08:35

标签: c# asp.net jquery

我有一个书签,当点击时会在当前页面上打开一个div弹出窗口(例如www.cnn.com)。这个div有一个按钮,单击该按钮会向我的应用程序域发出jQuery.get请求。这一切都运行正常,但我在响应中收到错误。这是发出请求的函数

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

        }
    }

我的问题是否与跨域脚本或语法有关?

由于

1 个答案:

答案 0 :(得分:2)

我认为你是对的。看起来您正在遇到跨站点脚本限制。

请记住,您将javascript代码插入目标网站的代码中。因此,就像代码从他们的页面运行一样。换句话说,您正试图从页面内部(例如,www.cnn.com)发出AJAX请求,并从您的站点(另一个域)检索数据。

我在文章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');

让您的服务器脚本返回将被评估的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,
});

为了给予适当的信任,我从Andrew Moore对this question

的答案中窃取并修改了这个JSONP示例