2016-10-22 4 views
0

So habe ich ein seltsames Problem mit einem Ajax-Aufruf und die Daten, die zurückgegeben wird. Grundsätzlich mache ich einen Anruf über Ajax zu meinem Skript, das dann einige Daten über die Amazon API ergreift. Wenn die Daten zurückgegeben werden, scheinen die URLs die tatsächliche Rückgabe selbst zu unterbrechen. Hier ist mein Code ist zu Ajax passieren,Weird Ajax/Javascript Problem

 if(flag != false){ 

     var myvars = {"keywords": keyword, "aff_code": aff_code, "roundup_title": roundup_title, "user_id": user_id, "newtab": newtab, "nofollow": nofollow}; 


      $.ajax({ 
      url: 'process.php', 
      type: "POST", 
      data: myvars, 
      dataType: 'json', 
       xhrFields: { 
        onprogress: function(e) 
        { 
       var this_response, response = e.currentTarget.response; 
       if(last_response_len === false) 
       { 
       this_response = response; 
       last_response_len = response.length; 
       } 
       else 
       { 
       this_response = response.substring(last_response_len); 
       last_response_len = response.length; 
       } 
       //console.log(this_response); 
       $("#result").html(this_response).slideDown(); 
        } 
       } 
      }) 





      .done(function(data) 
      { 
       //console.log('Complete response = ' + data); 
       var doned = "That wasn't so hard!"; 
       $("#result").html(doned).slideDown(); 
      }) 
      .fail(function(data) 
      { 
       console.log('Error: ', data); 
      }); 
      //$("#result").hide().html(output).slideDown(); 
      $("#result").html("Just a moment...").slideDown(); 

     } 

In meinem PHP-Code, das ist, wie ich es bin wieder:

 if($title != ''){ 
     if($d < 2){ 

       $ret .= '<td width="50%" style="padding-left:20px;">'; 
       $ret .= '<input type="checkbox" name="selection[]" value="' . $i . '"> Select This Item'; 
       $ret .= "<h5 class=\"media-heading\"><a href=\"" . $text_link . "\" target=\"_blank\" class=\"title-color\">" . $result[$i]['title'] . "</a></h5>"; 

       $ret .= '<div class="avatar avatar-xl avatar-circle"><img src="' . $image . '"></div>'; 
       $ret .= "</td>";         

       $d++; 
     } 
     else{ 
      $ret .= "</tr>"; 
      $ret .= "<tr>"; 

      $d = 0; 
     } 


     } 

Die amazon Link, die ich aus dem API graben sieht wie folgt aus:

[amazon_link] => Array 
      (
       [0] => http://www.amazon.com/Anaheim-Ducks-Mens-Patriotic-Snapback/dp/B01EI53EA0%3Fpsc%3D1%26SubscriptionId%3DAKIAIA66NHFH2G5I4XIA%26tag%3Dtest-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB01EI53EA0 
      ) 

Aber hier ist mein Problem. Manchmal bekomme ich Ergebnisse, die die URL alle zusammen und den Rest des Codes zu brechen am Ende als die Ergebnisse wie folgt aussehen:

%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB01D8YMIJK" target="_blank" class="title-color">Just Play Kitty Surprise Plush, Cleo 

Es ist verwirrend mich, warum etwas in der Mitte der URL brechen würde eine Rückkehr . Irgendwelche Vorschläge werden geschätzt. Vielen Dank!

Antwort

0

Es gibt Zeichen, die in Links nicht erlaubt sind, wenn sie von einem Server gesendet oder empfangen werden. Die Hauptsache ist &. Was ich rate Ihnen ist, Base64 kodieren Sie Daten in der PHP-Datei (mit php base64_encode Funktion) und dekodieren sie im Browser mit window.atob Funktion.

//javascript 
    $.ajax({ 
     url: 'process.php', 
     type: "POST", 
     data: myvars, 
     dataType: 'json', 
      xhrFields: { 
       onprogress: function(e) 
       { 
      var this_response, response = e.currentTarget.response; 
      if(last_response_len === false) 
      { 
      this_response = response; 
      last_response_len = response.length; 
      } 
      else 
      { 
      this_response = response.substring(last_response_len); 
      last_response_len = response.length; 
      } 
      //console.log(this_response); 
      $("#result").html(this_response).slideDown(); 
       } 
      } 
     }) 





     .done(function(data) 
     { 
     data = window.atob(data); //decoding data 
      //console.log('Complete response = ' + data); 
      var doned = "That wasn't so hard!"; 
      $("#result").html(doned).slideDown(); 
     }) 
     .fail(function(data) 
     { 
      data = window.atob(data) //decoding result 
      console.log('Error: ', data); 
     }); 
     //$("#result").hide().html(output).slideDown(); 
     $("#result").html("Just a moment...").slideDown(); 

    }