2011-09-07 16 views
6

सबमिट नहीं कर सकता है मेरे पास एक वर्किंग फॉर्म सत्यापन होता है, जिसमें उपयोगकर्ता नाम की दूरस्थ जांच भी शामिल है। हमने script.js फ़ाइल में कई अन्य जावास्क्रिप्ट जोड़े हैं और हाल ही में इस बिंदु का रिमोट हिस्सा तोड़ दिया है। प्रमाणीकरण, new_name फ़ील्ड द्वारा केवल एक फॉर्म फ़ील्ड चेक किया जा रहा है। यह आवश्यक है (काम करता है) और उपलब्ध होना चाहिए (काम नहीं करता)।Jquery मान्य रिमोट विफल रहा है। फ़ॉर्म

यहाँ jQuery है:

 $('#nickname_form').validate({ 
     rules: { 
      new_name: { 
       required: true, 
       remote: { 
        url: '/api/screenname_unique/', 
        type: 'post' 
       } 
      } 
     }, 
     messages: { 
      new_name: { 
       required: 'Please choose a Forum Username.', 
       remote: 'That Username is already taken or contains invalid characters.' 
      } 
     } 
    }); 

जैसा कि मैंने कहा करने से काम करने के लिए इस्तेमाल बिना किसी बदलाव के। मैंने बाकी script.js फ़ाइल की जांच की है और कोई त्रुटि दिखाई नहीं दे रही है। साथ ही, साइट पर, हम कहीं भी जेएस त्रुटियों को नहीं देख रहे हैं। अगर मैं उपर्युक्त कोड के दूरस्थ भाग को हटा देता हूं, तो आवश्यक चेक कार्य करता है और फ़ील्ड में कोई मान होने पर फॉर्म सबमिट होगा।

दूरस्थ जगह के साथ, फॉर्म सबमिट नहीं होगा, और रिमोट कॉल से AJAX प्रतिक्रिया सत्य या गलत है, कोई jQuery सत्यापन त्रुटि संदेश नहीं दिखाया गया है। रिमोट द्वारा बुलाया गया पृष्ठ यहां दिया गया है। ? यह प्रतिक्रिया तब दिए गए मूल्य के लिए दे रहा है के रूप में जहाँ तक ठीक काम करता है:

<?php 
header('Content-type: application/json'); 

//get the post value 
$screen_name = $_POST['new_name']; 

//get their member_id 
$member_id = $this->EE->session->userdata['member_id']; 

//return false if no screen_name provided 
if((!$screen_name) || (!$member_id)) { 
    echo json_encode(false); 
    exit; 
} else { //there is a screen_name 

    //Regex Check for valid chars 
    $valid = !preg_match('/[^a-z0-9_ -]/i',trim($screen_name)); 

    if (!$valid) { 
     echo json_encode(false); 
     exit; 
    } 

    //SQL 
    $results = $this->EE->db->query("SELECT member_id FROM exp_members WHERE screen_name = '$screen_name' and member_id <> '$member_id' limit 1"); 

    if ($results->num_rows() > 0) { 
     echo json_encode(false); 
    } else { 
     echo json_encode(true); 
    } 

} 

>

मैं सच में यकीन है कि जहां यहां से जाने के लिए नहीं कर रहा हूँ। विचार?

+1

क्या आपने 'console.log' का उपयोग किया है या समस्या को डीबग करने के लिए AJAX कॉल देखे हैं? – yoda

+0

मैंने फायरबग के साथ देखा है और AJAX कॉल सही या गलत के साथ 200 ठीक लौट रहे हैं। फ़ंक्शन ठीक काम कर रहा है - फ़ॉर्म सिर्फ अनुपलब्ध उपयोगकर्ता नाम को सबमिट या प्रतिसाद नहीं देगा। –

उत्तर

2

मैं जेक्यू 1.5.1 का उपयोग कर रहा था और बस 1.6.3 पर अपडेट किया गया था और अब यह फॉर्म ठीक काम कर रहा है। मुझे लगता है कि रिमोट और 1.5.1 के साथ कोई समस्या थी? धन्यवाद दोस्तों।

0

आपको रिमोट विकल्प के साथ डेटा नहीं भेजा गया है।

इसे आजमाएं। यह आपके लिए सहायक हो सकता है।

$("#nickname_form").validate({ 

rules: { 
Name: "required", 
email: { 
    required: true, 
    email: true 
}, 

username: 
{ 
    required: true, 
    remote: { 
    url: "http://www.xyz.com/checkusername.php", 
    type: "post", 
    data: { 
     username: function() { 
     return $("#username").val(); 
     } 
    } 
    } 
} 
}, 

messages: { 

Name: "Please enter name.", 
email: { 
    required: "Email address require.", 
    email: "Please enter valid email address." 
}, 

username: 
{ 
    required: " Please enter username.", 
    remote: " Username is already exists please choose other." 
} 
    }, 

errorPlacement: function(error, element) { 
       error.appendTo(element.next()); 
      }, 

submitHandler: function() { 
     sendmail(); 
     }, 
success: function(label) { 
     label.html("&nbsp;").addClass("valid_small");     
     } 

}); 

और सर्वर पक्ष पर दूरस्थ विकल्प में जेसन का उपयोग नहीं करते हैं। प्रिंट या गलत प्रिंट करें।

<?php 
    { 
$screen_name = $_POST['username']; 
$member_id = $this->EE->session->userdata['member_id']; 

    $results = $this->EE->db->query("SELECT member_id FROM exp_members WHERE screen_name = '$screen_name' and member_id <> '$member_id' limit 1"); 
    if(count($dataArray)>0) 
    { 
     echo "false";die; 
    } 
    else 
    { 
     echo "true";die; 
    }  
    } 
    ?> 
+0

धन्यवाद। मुझे इस रिमोट कॉल में डेटा पैरामीटर कभी नहीं जोड़ना पड़ा। रिमोट द्वारा बुलाए गए पेज का परीक्षण करने से पता चलता है कि इसे #new_name फ़ील्ड मान मिल रहा है। मैंने कोशिश करने के लिए डेटा पैरामीटर जोड़ा लेकिन यह कुछ भी नहीं बदला। आउटपुट को "सत्य"/गूंज "झूठी" गूंजने के लिए भी बदल दिया (जिस तरह से मैंने इसे मूल रूप से कल तक किया था) और इससे कुछ भी नहीं बदला। –

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