2013-08-26 2 views
5

के साथ गतिशील रूप से छवि लोड करें मैं jQuery के साथ एक छवि (PHP के साथ बनाया गया) लोड करने और इसके साथ कुछ चर पारित करने की कोशिश कर रहा हूं (उदाहरण के लिए: picture.php?user=1&type=2&color=64)। यह आसान हिस्सा है।विभिन्न जीईटी पैरामीटर

कठिन हिस्सा यह है कि मेरे पास एक ड्रॉपडाउन है जो मुझे पृष्ठभूमि (प्रकार पैरामीटर) चुनने में सक्षम बनाता है और मेरे पास रंग चुनने के लिए एक इनपुट होगा।

Here're समस्याओं का सामना करना पड़ रहा हूँ:

  1. एक ड्रॉपडाउन/इनपुट को छुआ नहीं किया गया है, मैं इसे URL से छोड़ना चाहते हैं।
  2. यदि कोई ड्रॉपडाउन/इनपुट स्पर्श किया गया है, तो मैं इसे यूआरएल में शामिल करना चाहता हूं। (यह पूर्व-मौजूदा स्ट्रिंग में केवल एक चर "&type=2" जोड़कर काम नहीं करेगा जैसे कि मैं ड्रॉपडाउन/इनपुट को कई बार स्पर्श करता हूं (&type=2&type=2&type=3))।
  3. पूर्व-मौजूदा यूआरएल में एक चर ("&type=2" - नीचे दिया गया कोड देखें) जोड़ते समय &-हस्ताक्षर गायब हो जाता है (यह इस तरह बन जाता है: "signature.php?user=1type=2")।

    <script> 
        var url = "signatureload.php?user=<?php echo $_SESSION['sess_id']; ?>"; 
    
        $(document).ready(function() { 
         window.setTimeout(LoadSignature, 1500); 
        }); 
    
        $("#signature_type").change(function() { 
         url += "&type="+$(this).val(); 
    
         LoadSignature(); 
        }); 
    
        function LoadSignature() 
        { 
         $("#loadingsignature").css("display", "block"); 
         $('#loadsignature').delay(4750).load(url, function() { 
          $("#loadingsignature").css("display", "none"); 
         }); 
        } 
    </script> 
    

    यहाँ कोड है जहाँ मैं छवि को लोड है::

    <div id="loadsignature"> 
        <div id="loadingsignature" style="display: block;"><img src="img/loading-black.gif" alt="Loading.."></div> 
    </div> 
    

    मैं नहीं जानता कि मैं और अधिक आगे कैसे कर सकता

यहाँ jQuery के लिए कोड है मेरी समस्या की व्याख्या करो। अगर आपको कोई संदेह है या आपको अधिक कोड चाहिए, तो कृपया मुझे बताएं।

आपकी मदद के लिए धन्यवाद!

संपादित करें:

<script> 
    var url = "signatureload.php?user=<?php echo $_SESSION['sess_id']; ?>"; 

    $(document).ready(function() { 

     window.setTimeout(LoadSignature, 1500); 

    }); 

    $("#signature_type").change(function() { 
     url = updateQueryStringParameter(url, 'type', $(this).val()); 

     LoadSignature(); 
    }); 

    function LoadSignature() 
    { 
     $("#loadingsignature").css("display", "block"); 
     $('#loadsignature').delay(4750).load(url, function() { 
      $("#loadingsignature").css("display", "none"); 
     }); 
    } 

    function updateQueryStringParameter(uri, key, value) 
    { 
     var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i"), 
     separator = uri.indexOf('?') !== -1 ? "&" : "?", 
     returnUri = ''; 

     if (uri.match(re)) 
     { 
      returnUri = uri.replace(re, '$1' + key + "=" + value + '$2'); 
     } 
     else 
     { 
      returnUri = uri + separator + key + "=" + value; 
     } 

     return returnUri; 
    } 
</script> 

EDIT2::

यहाँ वर्तमान कोड है

यहाँ signatureload.php के लिए कोड है

<?php 
    $url = "signature.php?"; 

    $count = 0; 
    foreach($_GET as $key => $value) 
    { 
     if($count > 0) $url .= "&"; 
     $url .= "{$key}={$value}"; 
    } 

    echo "<img src='{$url}'></img>"; 
?> 
+0

अभी भी समस्याएं हैं? अभी भी उत्पन्न यूआरएल में नहीं? उत्पन्न होने पर वर्तमान कोड कैसा दिखता है? (वह सर्वर साइड कोड नहीं है) – NiKiZe

+0

@NiKiZe @noam signatureload.php पैरामीटर से सहायता के साथ कोड उत्पन्न करता है और ड्रॉपडाउन में चयन को बदलने के बाद यहां से आउटपुट हैं: '' –

+0

लेकिन यह .php स्क्रिप्ट है, जब आप ब्राउज़र में दृश्य स्रोत करते हैं तो यह कैसा लगता है? (मैं जानना चाहता हूं कि कहां खो गया है, क्या यह पृष्ठ उत्पन्न होता है या जब जावास्क्रिप्ट निष्पादित किया जाता है तो यह कुछ और होता है) – NiKiZe

उत्तर

1

यहाँ एक संस्करण है जहां सभी डेटा एक अलग जावास्क्रिप्ट सरणी

<script> 
    var baseurl = "signatureload.php?user=<?php echo $_SESSION['sess_id']; ?>"; 
    var urlparams = {}; 

    $(document).ready(function() { 
     window.setTimeout(LoadSignature, 1500); 
    }); 

    $("#signature_type").change(function() { 
     urlparams['type'] = $(this).val(); 

     LoadSignature(); 
    }); 

    function LoadSignature() 
    { 
     var gurl = baseurl; // there is always a ? so don't care about that. 
     for (key in urlparams) { 
      gurl += '&' + encodeURIComponent(key) + '=' + encodeURIComponent(urlparams[key]); 
     } 

     $("#loadingsignature").css("display", "block"); 
     $('#loadsignature').delay(4750).load(gurl, function() { 
      $("#loadingsignature").css("display", "none"); 
     }); 
    } 
</script> 
0 में रखा गया है

इस रंग या किसी अन्य पैरामीटर के साथ urlparams['color'] = $(this).val();

+0

यदि यह अभी भी सही जगह पर उत्पन्न नहीं होता है और '&' के बजाय "\ u0026" का उपयोग करने का प्रयास करता है। लेकिन उस मामले में इसके लिए कुछ और है जो मूल मुद्दा है। – NiKiZe

+0

यह समस्या का वास्तव में साफ समाधान था, धन्यवाद! एकमात्र समस्या शेष है 'और' जो dissappearing रहता है। –

+0

और आपने 'gurl + = "\ u0026" + encodeURIComponent (key) +' = '+ encodeURIComponent (urlparams [key]) के साथ भी परीक्षण किया है; इसके बजाए?(लेकिन कृपया ध्यान दें कि आपको यह क्यों पता होना चाहिए कि यह क्यों नाराज है, भले ही यह इस प्रश्न के दायरे से बाहर हो) – NiKiZe

2

अगर मैं अंडर अपने प्रश्न को सही ढंग से टोड करें, यह जावास्क्रिप्ट/jQuery का उपयोग कर वर्तमान यूआरआई के जीईटी पैरामीटर को संशोधित करने का एक उचित तरीका खोजने के लिए नीचे आता है, है ना? जैसा कि आप बताते हैं कि सभी समस्याएं type पैरामीटर के मान को बदलने से आती हैं।

हालांकि यह प्रतीत नहीं होता है कि यह नौकरी के लिए जावास्क्रिप्ट प्लगइन्स भी हो सकता है। आप this की तरह है और अपने signature_type परिवर्तन घटना श्रोता में

function updateQueryStringParameter(uri, key, value) { 
    var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i"), 
     separator = uri.indexOf('?') !== -1 ? "&" : "?", 
     returnUri = ''; 

    if (uri.match(re)) { 
     returnUri = uri.replace(re, '$1' + key + "=" + value + '$2'); 
    } else { 
     returnUri = uri + separator + key + "=" + value; 
    } 

    return returnUri; 
} 

$('#signature_type').change(function() { 

    // Update the type param using said function 
    url = updateQueryStringParameter(url, 'type', $(this).val()); 

    LoadSignature(); 
}); 
+0

यदि यह अस्तित्व में नहीं है तो यह पैरामीटर नहीं बनाएगा, है ना? –

+0

@MagnusBurton हाँ, यह होगा। यदि यह अस्तित्व में नहीं है तो यह इसे बनाएगा। अगर ऐसा होता है, तो यह सिर्फ इसके मूल्य को बदल देगा। – federicot

+0

ऐसा प्रतीत नहीं होता है कि यह यूआरएल वैरिएबल को चरम पर जोड़ा गया पैरामीटर के साथ सेट कर रहा है। इसलिए, मैंने इसे संशोधित किया है और अब यह * * * - साइन: url = updateQueryStringParameter (url, 'type', $ (this) .val()); –

1

एक समारोह इस्तेमाल कर सकते हैं, तुम क्यों एक चर में अपनी चुनी मूल्य भंडारण, और फिर AJAX के पद डेटा और लोड छवि का उपयोग कर की कोशिश नहीं करते। इस तरह आप सुनिश्चित करते हैं कि केवल एक चर है, दोहराए नहीं।यहाँ उदाहरण

var type= 'default_value'; 

    $("#signature_type").change(function() {   
     type = $(this).val(); 
    }); 

है तो (यदि आप अपने "परिवर्तन" घटना समारोह में ऐसा कर सकता है) इस तरह इसे कहते ajax का उपयोग कर: हो सकता है कुछ इस तरह

$.ajax({ 
    type: 'GET', 
    url: 'signatureload.php', 
    data: { 
     user: <?php echo $_SESSION['sess_id']; ?>, 
     type: type, 
     ... put other variables here ... 
    }, 
    success: function(answer){ 
     //load image to div here 
    } 
}); 
1

:

<script> 
    var baseUrl = "signatureload.php?user=<?php echo $_SESSION['sess_id']; ?>"; 

    $(document).ready(function() { 
     window.setTimeout(function(){ 
      LoadSignature(baseUrl); 
     }, 1500); 
    }); 

    $("#signature_type").change(function() { 
     var urlWithSelectedType = baseUrl + "&type="+$(this).val(); 
     LoadSignature(urlWithSelectedType); 
    }); 

    function LoadSignature(urlToLoad) 
    { 
     $("#loadingsignature").css("display", "block"); 
     $('#loadsignature').delay(4750).load(urlToLoad, function() { 
      $("#loadingsignature").css("display", "none"); 
     }); 
    } 
</script> 
+0

क्या आप कृपया समझा सकते हैं कि यह क्यों काम नहीं करेगा? – noamtcohen

+0

यह काम करेगा लेकिन परिवर्तन पर यह वर्तमान में बदलने की बजाए यूआरएल में एक और * और टाइप = * जोड़ देगा। –

+0

दरअसल आप किसी अन्य प्रकार को जोड़ना/जोड़ना नहीं चाहते हैं = क्योंकि आप बेस यूआरएल नहीं बदल रहे हैं, लोडसिग्नेचर फ़ंक्शन हमेशा एक साफ यूआरएल प्राप्त करेगा जो बेस यूआरएल प्लस एंड टाइप = है, कोई संचित समावेशन नहीं है। – noamtcohen

संबंधित मुद्दे