1

我的脚本视图页面中有两个变量,一个称为产品,另一个称为站点。我已经这样宣布它们了。

添加.cshtml 查看:

    $(function () {

         products;
         sites;
        GetProductsAndSites(productsURL, sitesURL, '@Model.Key', false);
     });

我在另一个 .js 文件中调用了一个 ajax 函数。

人.js

   function GetProductsAndSites(productsURL, sitesURL, secondLevelSiteKey, flag) {
$.ajax({
    type: "POST",
    url: productsURL,
    async: false,
    success: function (returndata) {
        if (returndata.ok) {

            **products = returndata.dataNames;**
            //var tempProducts = returndata.dataNames;

            $('#select-product').autocomplete({
                delay: 0,
                minLength: 1,
                source: returndata.dataNames,
                select: function (event, ui) 
                {

                    $.ajax({
                        type: "POST",
                        url: sitesURL,
                        data: { "productID": selectedProductID, "siteID": secondLevelSiteKey },
                        async: false,
                        success: function (returndata) {
                            if (returndata.ok) {

                                  //products = tempProducts ;
                                **sites = returndata.dataNames;**


                                $('#select-site').autocomplete({
                                    delay: 0,
                                    minLength: 1,
                                    source: returndata.dataNames,
                                    select: function (event, ui) {
                                        $("#select-site").val(ui.item.label);


                    });
                }
            });
        }

    }
});

}

它在 (products = returndata.dataNames;) 行抛出“对象不支持此属性或方法”异常...起初我以为它看不到产品变量,但后来我意识到它可以看到“站点" 变量,所以我评论了 products 行,并期望它会在 sites 行抛出相同的异常,但它工作得很好。

我尝试创建一个局部变量并将 returndata.dataNames 存储在其中而不是 products varalbe ,然后在站点行之前设置 products 值,但它仍然引发异常。我试图将产品线放在站点线之后,它也在产品线引发了同样的异常。

帮助!

4

2 回答 2

1

经过搜索和搜索,我终于找到了我的解决方案。用IE8测试。

覆盖

if ('XDomainRequest' in window && window.XDomainRequest !== null) {
    jQuery.ajaxSettings.xhr = function() {
        try { 
            return new ActiveXObject("Microsoft.XMLHTTP"); 
        }
        catch(e) { }

        jQuery.support.cors = true;
    }
}

发出ajax请求

  $.ajax({
      type: 'GET',
      url: "your-url",
      async: true,
      cache: false,
      crossDomain: true,
      contentType: 'application/json; charset=utf-8',
      dataType: 'json'
    })
    .fail(function(jqXHR, textStatus, errorThrown) {
      console.log('ERROR: ' + errorThrown);
    })
    .always(function() {
      // Do stuff
    });
于 2015-06-24T01:06:33.193 回答
0

对我来说,这个答案有帮助,我检测到 IE 浏览器,如果它低于 7 左右,则设置 ActiveXObject 否则为 XMLHttpRequest。

jQuery.ajaxSettings.xhr: function() {
    // detect if IE and older versions of IE
    if (jQuery.browser.msie && jQuery.browser.version.substr(0, 1) <= 7)
        return new ActiveXObject("Microsoft.XMLHTTP");
    else
        return new XMLHttpRequest();
}

参考:

检测 IE 7 或更低版本。

ActiveXObject 和 XMLHttpRequest 之间的区别。

于 2019-12-19T12:20:45.647 回答