【问题标题】:how to check and receive result for the api call over jquery ajax如何通过 jquery ajax 检查和接收 api 调用的结果
【发布时间】:2020-01-08 10:47:15
【问题描述】:

我正在尝试通过带有 URL 的 jquery ajax 和带有 post 方法的参数来访问 API。在这里,我正在检查某个电子商务网站的给定 Pincode 是否可用,请帮助我了解如何检查或接收来自 API 响应的数据。

我的脚本:

<script type="text/javascript"> 
$(document).ready(function () {
    $('#check').click(function(){
        var api_url = 'http://example.com/webservices/b2cpincodecheck.jsp';
        var key = '4A8DA5E635656'; 
        var pincode = 604408 ;

        if(pincode=="") {
            alert("please enter the pincode");
        } else {
            $.ajax({
                url:api_url+"?reqid="+key+"&pincode="+pincode,
                dataType: "text/json",
                type: "POST",
                success: function(result){
                    //console.log(result);
                    if(result) {
                        alert("Delivery is available!");
                    } else {
                        alert("Delivery is not available!");
                    }
                }
            })
        }  
    });
});
</script> 

根据给定文档中的 API 响应,我将获取 XML 格式的数据

他们的回应:

<response>
<result>successful</result>
<pinCode>604408</pinCode>
<ouCode>abc</ouCode>
</response>

请帮助我了解如何检查或接收来自 API 响应的数据。 提前致谢。

【问题讨论】:

  • //console.log(result);这里的结果是 API 响应。
  • 我不明白是什么问题,你想在ajax响应中转换XML吗?
  • @FedericaVenuto,在控制台中,在注释掉这个错误 jquery.min.js:4 Mixed Content: The page at 'example.com/awaysellerhidden/…' was loaded over HTTPS, but requests an insecure XMLHttpRequest端点'example.com/webservices/…'。此请求已被阻止;内容必须通过 HTTPS 提供。发送@jquery.min.js:4 ajax@jquery.min.js:4(匿名)@prod_details.php?pro...id=5&shop_id=1:1174 dispatch@jquery.min.js:3 r.handle@jquery. min.js:3
  • 试试 https://....
  • @AliMaleki,我不知道如何接收数据并检查其结果是成功还是失败

标签: javascript php jquery ajax api


【解决方案1】:

jQuery AJAX方法是通过调用API从外部网站加载数据,得到JSONXML格式的响应。这个例子向您展示了在jQuery AJAX.something like this 中进行此类 API 调用是多么容易

$(document).ready(function () {
    $("#submit").click(function (e) {
        var validate = Validate();
        $("#message").html(validate);
        if (validate.length == 0) {
            $.ajax({
                type: "POST",
                url: "http://api.openweathermap.org/data/2.5/weather?id=" + $("#citySelect").val() + "&appid=API-KEY&units=metric",
                dataType: "json",
                success: function (result, status, xhr) {
                    var table = $("<p>Weather Description</p>");

                    table.append("<p>City:</p>" + result["name"] + "</p>");
                    table.append("<p>Country:</p>" + result["sys"]["country"] + "</p>");
                    table.append("<p>Current Temperature:</p>" + result["main"]["temp"] + "°C</p>");
                    table.append("<p>Humidity:</p>" + result["main"]["humidity"] + "</p>");
                    table.append("<tr><td>Weather:</p>" + result["weather"][0]["description"] + "</p>");

                    $("#message").html(p);
                },
                error: function (xhr, status, error) {
                    alert("Result: " + status + " " + error + " " + xhr.status + " " + xhr.statusText)
                }
            });
        }
    });

获取结果&lt;div id="message"&gt;&lt;/div&gt;

【讨论】:

  • 不是请求的 url,不是预期的格式(服务器发送 XML),不是干净的代码,节点没有关闭...
  • @karkael 我认为您需要眼镜,请求url 完成,dataType 是格式,不需要使用content type 我认为您对ajax 不了解,请参阅完整示例yogihosting.com/example-jquery-ajax-call-api
【解决方案2】:

$(document).ready(function () {
    $('#check').click(function(){
        var api_url = 'http://example.com/webservices/b2cpincodecheck.jsp';
        var key = '4A8DA5E635656'; 
        var pincode = 604408 ;

        if(pincode=="") {
            alert("please enter the pincode");
        } else {
            $.ajax({
                url:api_url+"?reqid="+key+"&pincode="+pincode,
                dataType: "xml",
                type: "POST",
                success: function(result, status, jqXHR){
                    console.log(loadData(result || jqXHR.responseText))
                }
            })
        }
    });
});

function loadData(xml) {
  var incubator;
  if (typeof xml === "string") {
    incubator = document.createElement("div");
    incubator.innerHTML = xml;
  } else {
    incubator = xml;
  }
  return {
    "response": {
      "result": incubator.querySelector("result").textContent,
      "pinCode": incubator.querySelector("pinCode").textContent,
      "ouCode": incubator.querySelector("ouCode").textContent,
    }
  }
}

function xmlToObject(xml) {
  var incubator = document.createElement("div");
  incubator.innerHTML = xml;
  return Array.prototype.map.call(incubator.childNodes, nodeToObject)
}

function nodeToObject(node) {
  if (node.nodeType === Node.ELEMENT_NODE) {
    return {
      nodeName: node.nodeName.toLowerCase(),
      attributes: nodeAttributesToObject(node),
      childNodes: Array.prototype.map.call(node.childNodes, nodeToObject)
    };
  }
  if (node.nodeType === Node.TEXT_NODE) {
    return node.textContent;
  }
}

function nodeAttributesToObject(node) {
  var result = {};
  Array.prototype.forEach.call(node.attributes, function (attr) {
    result[attr.name] = attr.value;
  });
  return result;
}
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"&gt;&lt;/script&gt;

这是从 xml 中提取数据的两个示例:

  1. 函数loadData 得到你期望的字段
  2. xmlToObject 函数可以帮助您将 XML 视为一个简单的 JavaScript 对象。

请注意:jQuery ajax setting dataType应为空或直接格式(即:"json",而不是"text/json"),此处应设置为"xml"

希望对你有帮助!

【讨论】:

  • 无需将代码与javascript和xml混为一谈,ajax自己做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-17
  • 2013-08-08
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
相关资源
最近更新 更多