【问题标题】:web service not working on safariWeb 服务无法在 Safari 上运行
【发布时间】:2011-12-16 15:40:13
【问题描述】:

我创建了一个 Web 服务并使用 ajax 从我的 javascript 中调用它。它在某种程度上可以在 Internet Explorer 上运行,但是当我打电话尝试在 safari 或 firefox 上运行它时失败。有谁知道为什么?

这是我的js代码:

function GetTopApps() {
    var serviceUrl = "http://localhost:2975/GetData.asmx?wsdl";

    var soapMessage ='<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><HomeScreenApps xmlns="http://tempuri.org/" /></soap:Body></soap:Envelope>'


    $.ajax({
        url: serviceUrl,
        type: "post",
        datatype: "xml",
        data: soapMessage,
        complete: GenerateList,
        contentType: "text/xml; charset=\"utf-8\""
    });

    return false;
}

function GenerateList(xmlHttpRequest, status) {
    $(xmlHttpRequest.responseXML)
                .find('HomeScreenAppsResult')
                .each(function () {
                 parseXML(xmlHttpRequest);
            });
        }

function parseXML(xmlHttpRequest) {
    var xmlDoc = xmlHttpRequest.responseXML;
    var appIdArray = xmlDoc.getElementsByTagName('application_id');
    var appNameArray = xmlDoc.getElementsByTagName('application_name');
    var appRatingArray = xmlDoc.getElementsByTagName('average_rating');

    var appCount = appIdArray.length;
    var appList = document.getElementById('TopApps');

    var htmlString = "<small><small><small><small><small><small><small><ul data-role='listview' data-filter='false' id='list'>";

    for (i = 0; i < 5; i++) {

        htmlString = htmlString + "<li><a id='" + appIdArray[i].xml + "' onclick='AppSelected(id);'>";
        htmlString = htmlString + "<img src='' alt='Logo' class='ListAppLogo'>";
        htmlString = htmlString + "<h3>" + appNameArray[i].xml + "</h3>";
        htmlString = htmlString + "<p>" + appRatingArray[i].xml + ".0/5.0</p>";
        htmlString = htmlString + "<input  type='hidden' value='" + appIdArray[i].xml + "'></a></li>";
    }

    htmlString = htmlString + "</ul></small></small></small></small></small></small></small>";
    appList.innerHTML = htmlString;
    $('#list').listview();

}

【问题讨论】:

  • “失败”怎么办?当您使用 Safari 的调试工具或 FireBug 单步调试时,会发生什么?
  • 我想javascript控制台有话要说...
  • 请考虑使用 Fiddler 调试 Web 服务。 fiddler2.com/fiddler2
  • @David 当我使用 safari 的调试工具单步执行它时,它说 XMLHTTPRequest 无法加载“localhost:2975/GetData.asmx?wsdl”。 Access-Control-Allow-Origin 不允许来源 我的 IP 地址
  • @David 这是 Firefox 所说的:[11:16:00.137] OPTIONS localhost:2975/GetData.asmx?wsdl [HTTP/1.1 405 Method Not Allowed 16ms]

标签: javascript .net web-services safari


【解决方案1】:

您可以通过使用 Javascript 调试器(例如用于 Firefox 的 Firebug 或用于 Safari 的内置 Web 检查器)来了解自己。

首先检查您的 javascript 错误日志和控制台是否有任何解析错误,如果没有,请使用断点单步执行您的代码以查看其执行方式。如果您发现任何您不理解的具体内容,请随时询问。

还要考虑错误可能在您的网络服务中,而不是在您调用它的位置。

【讨论】:

  • Web 服务本身运行良好。当我在 Internet Explorer 上调用它时,它还会从我的数据库中返回正确的数据。但是,当我在 safari 上运行它时,它不会调用 ajax 方法,所以我猜测 xml 请求在 safari 上的发送方式可能不同?
【解决方案2】:

Safari 比 IE 或 Chrome 更安全。 您可以轻松地在 chrome 或 IE 上运行,因为 safari 需要您正在调用其服务的服务器的证书。 如果您想在 mac 或 Iphone 上运行该服务器,请确保为该服务器创建证书

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    相关资源
    最近更新 更多