2017-05-19 90 views
0

我試圖使用Gumroad API作爲Wordpress插件,並試圖瞭解如何進行任何調用,GET在我的情況。JSONP - 「SyntaxError:missing; before statement」或「Cross-Origin Request Blocked」

我搜索了很多關於堆棧溢出的代碼示例,但仍然無法運行它沒有任何錯誤。

Plain JS或jQuery.ajax是可以接受的。 我的jQuery版本是1.12.4

當我使用JSNOP時,我得到了firefox webdev工具中的響應,但仍然在JS中出現錯誤,因爲API返回JSON(如docs中所述)。

我嘗試的代碼變化的數字:

代碼1

jQuery.ajax({ 
    dataType: 'jsonp', 
    url: 'https://api.gumroad.com/v2/products', 
    data: { 
     'access_token': '676234257caeb63ca7683c39d14e0091387a1a36af0c2135f989d0fd84ffc0c5' 
    }, 
    success: function(data){ 
     console.log(data); 
    }, 
    error: function(d){ 
     console.log(d); 
    } 
}); 

代碼2

jQuery(document).ready(function() { 
    var url = 'https://api.gumroad.com/v2/products/'; 
    url += '?method=getQuote'; 
    url += '&format=jsonp'; 
    url += '&lang=en&'; 
    url += 'jsonp=myJsonMethod'; 
    url += '&?callback=?'; 
    url += '&access_token=676234257caeb63ca7683c39d14e0091387a1a36af0c2135f989d0fd84ffc0c5'; 
    jQuery.getJSON(url); 
}); 

function myJsonMethod(response){ 
    console.log (response); 
} 

但誤差總是相同的:

錯誤:

SyntaxError: missing ; before statement 

響應:

{ 
    "success": true, 
    "products": [{ 
     "name": "Test", 
     "url": "https://s3.amazonaws.com/gumroad/attachments/1295292066926/b81638b60726496a98e63d2cc7d80075/original/IMG_09032017_123025.png", 
     "preview_url": "https://static-2.gumroad.com/res/gumroad/1295292066926/asset_previews/a4a204f68be7087dd360a142e620728e/retina/Color_Wheel.png", 
     "description": "\n\u003cp\u003eOffer test\n\n\u003c/p\u003e\n", 
     "customizable_price": false, 
     "webhook": null, 
     "require_shipping": false, 
     "custom_receipt": "", 
     "custom_permalink": null, 
     "subscription_duration": null, 
     "id": "MmaHg-V0-uqWW4T2W_-LLw==", 
     "custom_product_type": null, 
     "countries_available": [], 
     "price": 1000, 
     "currency": "usd", 
     "short_url": "https://gum.co/qiHIX", 
     "formatted_price": "$10", 
     "published": true, 
     "shown_on_profile": true, 
     "file_info": { 
     "Size": "187 KB", 
     "Resolution": "1080p" 
     }, 
     "max_purchase_count": null, 
     "deleted": false, 
     "custom_fields": [], 
     "custom_summary": "", 
     "variants": [], 
     "sales_count": 0, 
     "sales_usd_cents": 0, 
     "view_count": 6 
    }] 
} 

請求的URL

https://api.gumroad.com/v2/products?callback=jQuery112409655243732650752_1495261525390&access_token=676234257caeb63ca7683c39d14e0091387a1a36af0c2135f989d0fd84ffc0c5&_=1495261525391 

enter image description here


我不能使用JSON請求類型becouse其病程另一個錯誤的:

Cross-Origin Request Blocked: 
    The Same Origin Policy disallows reading the remote resource 
    at https://api.gumroad.com/v2/products. 
    (Reason: CORS header ‘Access-Control-Allow-Origin’ missing). 

非常感謝您的任何建議!

回答

1

創建1項額外的PHP即:testing.php文件,以獲取JSON響應,然後調用從你的AJAX請求的PHP文件。

PHP文件

$url = 'https://api.gumroad.com/v2/products?callback=jQuery112409655243732650752_1495261525390&access_token=676234257caeb63ca7683c39d14e0091387a1a36af0c2135f989d0fd84ffc0c5&_=1495261525391'; 
header('Content-Type: application/json'); 
echo file_get_contents($url); 

Javasript

jQuery.ajax({ 
    url : 'testing.php', 
    method: 'GET', 
    success: function(data, txtStatus) { 
    console.log(data); 
    }  
}); 
+0

是的,它的工作原理!非常感謝!你爲我節省了大量的時間。 小小的更正:最後你應該使用JSON.parse(數據)來訪問數據。 –

+0

我只是爲了測試目的而使用console.log。 –

+0

是的,我明白了,通過這個小小的修正,代碼片段已經完成並且完全可行。謝謝! –

1

API調用只能通過服務器進行。使用PHP/cURL。

$curl = curl_init(); 

curl_setopt_array($curl, array(
    CURLOPT_URL => "https://api.gumroad.com/v2/products", 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_MAXREDIRS => 10, 
    CURLOPT_TIMEOUT => 30, 
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, 
    CURLOPT_CUSTOMREQUEST => "GET", 
    CURLOPT_HTTPHEADER => array(
    "authorization: XX Your Profile Key", 
    "cache-control: no-cache" 
    ), 
)); 

//Fetch value from Gumroad 
$response = curl_exec($curl); 

//Get products from string 
$prod = filter_var($response, FILTER_SANITIZE_NUMBER_INT); 

//Throw error 
$err = curl_error($curl); 
curl_close($curl); 

//Print result 
if ($err) { 
    echo "400"; 
} 
else { 
    echo $prod; 
} 
+0

非常感謝!我永遠不會猜到這對js是不可能的。 –

+0

但是,我得到了成功,但401代碼(即這種方式)的錯誤和谷歌搜索解決方案。感謝你我的實驗向前發展! –

+0

可能是錯誤的「CURLOPT_HTTPHEADER」 - 你聲明數組,但輸入兩個字符串。相關:http://stackoverflow.com/questions/9154560/error-401-using-curl-in-php-to-access-rest-api –

相關問題