각 루프 내부의 Ajax 호출

압드 파힘

이 주제와 관련된 많은 게시물을 찾았습니다. 그러나 내가 찾은 해결책은 나에게 그다지 부적합하지 않습니다. 일부 전문가는 코드 구조를 변경하라고 조언했지만 어떻게해야할지 모르겠습니다.

내가 원하는 것 :
1) SQL 데이터베이스에서 영화 목록
가져 오기 2) 각 영화에 대한 웹 사이트에서 정보 가져 오기

내가 직면 한 문제 : PHP MAX_TIMEOUT이 발생합니다.

내가 생각한 해결책 : 각 영화에 대해 비동기 요청을 개별적으로 호출하십시오 .

병목 현상 : 너무 많은 비동기 요청

구현 방법에 대해 조언 해 주시겠습니까 (가능한 경우 jquery가 아닌 JS 만 해당)?

웹의 일부 솔루션 :

1) ASYNC = FALSE를 사용하십시오 .... SYNC req를 사용하고 싶지 않습니다. Ajax를 사용하는 것이 무의미합니다.
2) 모든 데이터를 수집 한 다음 Ajax 호출을 한 번만합니다. 긴 스크립트 (웹에서 영화 정보 가져 오기), 궁극적으로 PHP MAX_TIMEOUT
3) PHP MAX_TIMEOUT 증가 ... 가능하지 않음, 얼마나 늘릴 지 모르겠습니다.

JS

function loadData(mArray){
    mArray = [{"movieid":"1","title":"10 Things I Hate About You"},{"movieid":"2","title":"100 Girls"}]; // TO SIMLYFY, I PUT THIS CODE HERE .. NORMALLY I GET THIS ARRAY USING ANOTHER AJAX CALL
    for (var i = 0; i < mArray.length; i++) { 
        var obj = mArray[i];
        webAjaxcall(obj["mid"],obj["title"]);  // DEFINITELY NOT A GOOD IDEA
    }
    return true;
}

function webAjaxcall(mid,title){
    var xmlhttp=new XMLHttpRequest();
    xmlhttp.onreadystatechange=function(){
        if (xmlhttp.readyState==4 && xmlhttp.status==200){
            //DO SOMETHING
        }
    }
    xmlhttp.open("POST","file2.php",true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    params = "title="+title+"&mid="+mid;
    xmlhttp.send(params);
}

누군가 내가 JS 배열을 채우는 방법을 알고 싶어하는 경우를 대비하여 :

파일 1

$sql = "SELECT `movieid`,`title` FROM movielist";
    $result = mysql_query($sql) or die(mysql_error());
    while($row=mysql_fetch_assoc($result)){
    $output[] = $row;
    }
    exit(json_encode($output));

파일 2

$json=file_get_contents("http://www.website.com/?t=".rawurlencode($moviename));
$info=json_decode($json);
DO SOMETHING

AJAX를 통해 영화 감상

var xmlhttp=new XMLHttpRequest();
var myarr;
xmlhttp.onreadystatechange=function(){
    if (xmlhttp.readyState==4 && xmlhttp.status==200){
        myarr = xmlhttp.responseText;
        loadData(JSON.parse(myarr));
    }
}
xmlhttp.open("POST","file1.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
params = "fname=<?php echo $ses_id;?>";
xmlhttp.send(params);
브랜든 스크립트

참고 : 동기식을ASYNC = FALSE 의미 합니다 ., 모든 것이 순서대로 발생하고 한 번의 호출이 이전 호출을 기다리고 궁극적으로 코드를 차단합니다.

솔루션 / 의견 : 데이터 를 가져 오는 사이트 (또는 API)가 단일 요청으로 여러 결과를 처리 할 수 ​​없다고 가정하면이 반복되는 ajax 요청을 처리 할 수있는 유일한 방법은 ajax를 캐시하는 것입니다. SQL db에서 직접 결과 :

::pseudo-architecture::

다음 PHP 파일을 가정 해 보겠습니다.

index.php

  • 결과를 표시합니다.
  • 단일 SQL 쿼리를 사용하여 영화를 표시하는 루프 로직을 처리합니다.
  • 캐시되지 않은 결과는 "로드 중"표시기를 표시합니다.
  • $(document).ready()모든 "캐시되지 않은"영화를 반복 하는 함수를 작성하고 아직 캐시되지 않은 각 항목에 대해 적절한 매개 변수를 사용 하여 get.php비동기 적으로 호출합니다 GET. 이렇게하면 페이지가 이미로드 된 후에 발생하므로 페이지로드 시간에 영향을주지 않습니다.

::pseudocode::

for movie in movies
    if object has cached data and date retrieved is less than [some time ago]
        return data from SQL db
    else
        display a "caching in progress" notification for that title
        send GET request to get.php

참고 : 서버가 얼마나 강력한 지에 따라 get.php에 대한 요청을 큐 / 지연해야 할 수 있습니다. 한 번에 1000 개의 개별 스레드가 실행되지 않도록합니다.

get.php

  • URL의 예 : http://www.yoursite.com/get.php?name=superman&year=1980
  • $_GETindex.php의 ajax 루프에서 전송 된 매개 변수를 검색 하고 요청을 타사 API / 웹 사이트로 전달합니다.
  • 당신은 이것이 비동기 적이기를 원하고 최대한 빨리 연결 닫기를 던집니다 (방법 참조)
  • 이것을 API "프록시"라고 생각하십시오.

::pseudocode::

send 200 ok status code and connection-close header
get $_GET parameters
retrieve API data for your movie by sending $_GET parameters
cache to your SQL db once data is returned

궁극적으로 페이지는 실시간으로로드되고 새 데이터를 보려면 페이지를 새로 고쳐야합니다 (또는 정말 멋지게 하려면 클라이언트에 알리는 WebSockets로 작업을 수행 ).

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Ajax 호출 후 Jquery의 루프

분류에서Dev

루프 내부의 비동기 호출

분류에서Dev

각 루프 내에서 cheerio.load 호출

분류에서Dev

$ resource를 사용하는 루프 내 Ajax 호출

분류에서Dev

루프 내에서 Ajax 호출을 사용하는 JavaScript Promise

분류에서Dev

각 루프 내부의 Ember 2 작업

분류에서Dev

조각 내부의 호출기

분류에서Dev

각도 체인 AJAX 호출

분류에서Dev

JQuery : ajax 호출 완료 후 각 루프를 콜백하는 방법은 무엇입니까?

분류에서Dev

for 루프의 내부 호출에 대해 동일한 응답

분류에서Dev

루프 파이썬 내부의 함수 호출

분류에서Dev

루프에서 Jquery Ajax 호출

분류에서Dev

Ajax : for 루프로 여러 API 호출

분류에서Dev

루프 내부를 반복하고 AJAX 호출을 통해 JSON 객체의 결과를 정렬하려면 어떻게해야합니까?

분류에서Dev

Ember CLI- itemController 대신 구성 요소를 사용하는 각 루프 내의 조건부 출력

분류에서Dev

PHP while 루프의 ID를 기반으로하는 Sweet Alert 및 Ajax 호출

분류에서Dev

중첩 루프 분석 (각 루프는 내부 루프 경계)

분류에서Dev

Meteor Blaze HTML : 각 루프 내부의 조건부 템플릿

분류에서Dev

MainActivity 내부 탐색 호스트 조각의 메서드 호출

분류에서Dev

Jquery. ajax 호출로 .each 루프 후 함수 호출

분류에서Dev

asp.net 프로젝트 내부의 HTML 페이지에서 Ajax 요청 호출

분류에서Dev

Meter의 각 루프에 대해 내부 변수 사용

분류에서Dev

AJAX 호출의 DataTable

분류에서Dev

텍스트 파일에 쓸 때 for 루프 내부의 변수 값 호출

분류에서Dev

마지막 반복 만 취하는 루프 내부의 함수 호출

분류에서Dev

루프 내부의 파이썬 재귀 호출. 어떻게 작동합니까?

분류에서Dev

다른 함수의 "if 루프"내부에서 함수 호출 / 이동-Qt, C ++

분류에서Dev

각도의 루프에서 비동기 호출을 사용하는 방법은 무엇입니까?

분류에서Dev

외부 메소드의 루비 루프에서 다음 호출

Related 관련 기사

  1. 1

    Ajax 호출 후 Jquery의 루프

  2. 2

    루프 내부의 비동기 호출

  3. 3

    각 루프 내에서 cheerio.load 호출

  4. 4

    $ resource를 사용하는 루프 내 Ajax 호출

  5. 5

    루프 내에서 Ajax 호출을 사용하는 JavaScript Promise

  6. 6

    각 루프 내부의 Ember 2 작업

  7. 7

    조각 내부의 호출기

  8. 8

    각도 체인 AJAX 호출

  9. 9

    JQuery : ajax 호출 완료 후 각 루프를 콜백하는 방법은 무엇입니까?

  10. 10

    for 루프의 내부 호출에 대해 동일한 응답

  11. 11

    루프 파이썬 내부의 함수 호출

  12. 12

    루프에서 Jquery Ajax 호출

  13. 13

    Ajax : for 루프로 여러 API 호출

  14. 14

    루프 내부를 반복하고 AJAX 호출을 통해 JSON 객체의 결과를 정렬하려면 어떻게해야합니까?

  15. 15

    Ember CLI- itemController 대신 구성 요소를 사용하는 각 루프 내의 조건부 출력

  16. 16

    PHP while 루프의 ID를 기반으로하는 Sweet Alert 및 Ajax 호출

  17. 17

    중첩 루프 분석 (각 루프는 내부 루프 경계)

  18. 18

    Meteor Blaze HTML : 각 루프 내부의 조건부 템플릿

  19. 19

    MainActivity 내부 탐색 호스트 조각의 메서드 호출

  20. 20

    Jquery. ajax 호출로 .each 루프 후 함수 호출

  21. 21

    asp.net 프로젝트 내부의 HTML 페이지에서 Ajax 요청 호출

  22. 22

    Meter의 각 루프에 대해 내부 변수 사용

  23. 23

    AJAX 호출의 DataTable

  24. 24

    텍스트 파일에 쓸 때 for 루프 내부의 변수 값 호출

  25. 25

    마지막 반복 만 취하는 루프 내부의 함수 호출

  26. 26

    루프 내부의 파이썬 재귀 호출. 어떻게 작동합니까?

  27. 27

    다른 함수의 "if 루프"내부에서 함수 호출 / 이동-Qt, C ++

  28. 28

    각도의 루프에서 비동기 호출을 사용하는 방법은 무엇입니까?

  29. 29

    외부 메소드의 루비 루프에서 다음 호출

뜨겁다태그

보관