#javascript #jquery #angularjs #json #jsonp
#javascript #jquery #angularjs #json #jsonp
Вопрос:
Структура ссылки JSON выглядит следующим образом:
www.something.com/link —номер-rest-of-the-link.com.json
Теперь мне нужно получить несколько файлов ссылок JSON, и единственное, что меняется, — это номер в приведенной выше ссылке. Допустим, оно варьируется от 10 до 40, поэтому первое выглядит так:
www.something.com/link —10-rest-of-the-link.json
а вторая выглядит так
www.something.com/link —11-rest-of-the-link.com.json
и так далее, пока не достигнет числа 40.
Есть ли способ, которым я могу получить все это в одной функции. Я пробовал это:
var nmr = function({for(nmr=10;nmr<40;nmr )});
var json = 'www.something.com/link' nmr 'rest-of-the-link.json';
но это не сработает.
Есть ли способ добиться этого?
Пожалуйста, обратите внимание, что я не вставил часть «http», поскольку SO автоматически связывает ее.
Спасибо.
Комментарии:
1. Да, вы можете объединить результат нескольких вызовов в одном объекте : для каждого числа из заданного диапазона выполните вызов и добавьте ответ в массив, который вы вернете
2. как вы волшебным образом получаете json непосредственно из URL-адресов?
3. Пожалуйста, предоставьте образец. Спасибо.
4. @madalin, отредактировано.
5. @tholo что вы отредактировали, где ваш запрос ajax?
Ответ №1:
вы можете создать массив следующим образом
var links = [];
for(var i=2005;i<2015.length;i ){
links.push('http://www.link.com/an-' i '-rest');
}
//now make your request for each link
другой пример
var requested = 0;
function startLoading(){
if(requested==2015) {
return alert("all files loaded");
}
makeRequest('http://www.link.com/an-' requested '-rest');
}
function makeRequest(url){
//the body of request
//then
//if response is ready make what you want for it and go next
requested ;
startLoading();
// and startLoading(); to go to the next link
}
startLoading(); //start
Ответ №2:
Попробуйте вот так,
var json = [];
for(var i = 10; i <= 40; i ) {
json.push('www.something.com/link-' i '-rest-of-the-link.json');
}
Теперь json
все ссылки будут от 10 до 40. Если вы хотите получить содержимое, используйте ajax
для этого
Ответ №3:
концепции
-
сгенерируйте массив обещаний, которые будут вызывать каждый файл json из url
-
выполняйте каждое обещание одновременно
пример
const Promise = require('bluebird')
const rp = require('request-promise')
function getJsonFromUrlParam(num) {
const uri = `www.something.com/link-${num}-rest-of-the-link.json`
return rp({ method: 'GET', uri, json: true })
}
/** declare param */
const params = []
for (let i = 10; i <= 40; i ) {
/** get each promise param */
params.push(getJsonFromUrlParam(i))
}
/** get each json file in the same time */
Promise.all(params)
.then(result => {
/** get result here
* result is array of json files
*/
console.log(result)
})
Комментарии:
1. как мы можем сделать это в версии v1?