javascript - 从 JS 访问 REST API

标签 javascript php jquery rest api

需要使用 jQuery ajax 从 JS 代码访问 REST API:

function tryQwintry () {
    var data = {
        "params[weight]" : "100",
        "params[dimensions]" : "100x100x100",
        "params[delivery_pickup]" : "msk_1",
        "params[insurance]" : "false",
        "params[items_value]" : "350",
        "params[retail_pricing]" : "1"
    };

    $.ajax({
        url: "http://logistics.qwintry.com/api/cost",
        type: "POST",
        dataType: "jsonp",
        contentType: "application/json",
        headers: {"Authorization":"Bearer " + MY_API_KEY},
        data: data,
        success: function (cost) {
            console.log("стоимость доставки $"+cost);
        },
        error: getErrorMsg
    });
}

API 文档(所有示例均为 PHP):

<?php
    define('SITE_URL', 'logistics.qwintry.com');
    define('API_KEY', 'YOUR_API_KEY'); //don't forget to set your key!

    $url =  'http://'. SITE_URL .'/api/cost';


    $data = array ( 
        'params' => array(
            'weight' => 5, // in lb
            'delivery_pickup' => 'msk_1', // full list of pickup points can be retrieved from /api/locations-list
            'insurance' => true,
            'items_value' => 500, // declaration items total cost in USD
            'retail_pricing' => true // retail / wholesale pricing?
        ),
     );
    $data_string = http_build_query($data);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer '. API_KEY));
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS,  $data_string);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $response = curl_exec($ch);
    curl_close($ch);
    var_dump($response);

与我用 Java 编写的代码相同:

public double getCostPickup(String weight, String dimensions, String toPickup, String insurance, String value) throws Exception {

    Map<String, Object> params = new HashMap<>();
    params.put("params[weight_kg]", weight);
    params.put("params[dimensions_cm]", dimensions);
    params.put("params[delivery_pickup]", toPickup);
    params.put("params[insurance]", insurance);
    params.put("params[items_value]", value);
    params.put("params[retail_pricing]", RETAIL_PRICING);

    String url = BASE_URL+"/api/cost";
    HttpResponse<JsonNode> jsonResponse = Unirest.post(url).fields(params).asJson();
    return getCost(jsonResponse, insurance);
}

配置ajax请求数据时遇到问题。 因此,任何帮助将不胜感激。

更新:更改了我的 JS 代码:

function tryQwintry () {
    var data = {
        "params[weight]" : "100",
        "params[dimensions]" : "100x100x100",
        "params[delivery_pickup]" : "msk_1",
        "params[insurance]" : "false",
        "params[items_value]" : "350",
        "params[retail_pricing]" : "1"
    };

    $.ajax({
        url: "http://logistics.qwintry.com/api/cost",
        type: "POST",
        dataType: "json",
        contentType: "application/json",
        headers: {"Authorization" : "Bearer"+MY_API_KEY, "Access-Control-Allow-Origin" : "true"},
        data: JSON.stringify(data),
        success: function (cost) {
            console.log("стоимость доставки $"+cost);
        },
        error: getErrorMsg
    });
}

在 Chrome 开发者模式中出现此错误: enter image description here

最佳答案

您是否使用 CORS 请求?

如果不是,则将数据类型更改为“json”,而不是“dataType:“jsonp”。

如果您正在执行 CORS,然后启用 CORS 请求,那么您需要添加 php 代码以允许 CORS 请求。

header("Access-Control-Allow-Origin: *");

检查此链接 CORS with php headers

Json数据格式:

 var data = {
        weight : 100,
        dimensions : "100x100x100",
        delivery_pickup : "msk_1",
        insurance : false,
        items_value : 350,
        retail_pricing : 1
    };

$.ajax({
    url: "http://logistics.qwintry.com/api/cost",
    dataType: "jsonp",
    contentType: "application/json",
    headers: {"Authorization":"Bearer " + MY_API_KEY},
    data: JSON.stringify(data),
    success: function (cost) {
        console.log("стоимость доставки $"+cost);
    },
    error: getErrorMsg
});

注意:方法:JOSNP 不允许“POST”

关于javascript - 从 JS 访问 REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39795378/

相关文章:

javascript - 复杂的 Javascript 变量包含其他指定变量的值?

PHP 和 MySQL 问题

php - 从一个表中选择另一个表中ID等于字符串的所有字段

javascript - 停止表单操作重定向或 href 重定向

javascript - 我在检索由 GZIP 格式的 API 调用接收的数据时遇到问题

javascript - 如何通过悬停调用类/id

javascript - 如何使用 Nuxt 在 html 元素上设置 lang 属性?

javascript - 将总和文本移动到 amcharts 序列图中的最右侧

php - 组合数组

jquery-ui - 如何以编程方式调用 jQuery UI Draggable 拖动启动?