PDA

View Full Version : مشکل در ارسال اطلاعات Post با Ajax



Parviz-Turk
سه شنبه 20 اسفند 1392, 20:58 عصر
با سلام.

من یه فرم دارم که میخوام اطلاعات اون رو با متود post (به علت حجم زیاد مثلا میتونه 1000 سطر باشه) و با اجاکس به یه فرم php بفرستم و از اون جواب بگیرم.

ولی وقتی تکست ها رو میفرستم اطلاعات درستی دریافت نمیکنم.

مثلا تو متن هر جا که & باشه دگه بقیه متن نمیافته یا به جای کاراکتر ' اینو میندازه '\ یا اصلا + رو نمیندازه. مشکل من از کجاس؟

در اطلاعاتی که کاربر میفرسته خودش ممکن کد php و یا هر متن دگه ای باشه و طولش هم خیلی زیاد باشه. اطلاعات هم از طریق یه textarea ارسال میشه.

کد جاوا :



document.getElementById("sub").value='در حال پردازش';
document.getElementById("sub").disabled = true;
document.getElementById("res").style.display="none";
document.getElementById("res").readOnly=true;
document.getElementById("tblx").style.display="none";
var xmlhttp;
if (window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
else
{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("res").value=xmlhttp.responseText;
document.getElementById("sub").disabled = false;
document.getElementById("sub").value='شروع عملیات';
document.getElementById("res").style.display="block";
document.getElementById("tblx").style.display="block";
}
}

xmlhttp.open("POST","pr22.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
var ppy = "sst=" + document.getElementById("txa").value
xmlhttp.send(ppy);



کد صفحه php :




<?php
$instr = $_POST['sst'];
echo $instr;
?>

sh.n.n786
سه شنبه 20 اسفند 1392, 23:09 عصر
درود و ...
اطلاعات رو از طریق آرایه های Json ارسال کنید خودش اسکیپ میکنه.


JSON.parse(data)

این مقاله رو بخونید
http://www.w3schools.com/json/

Parviz-Turk
چهارشنبه 21 اسفند 1392, 00:20 صبح
با سلام

متاسفانه برای من کار ساز نبود + من به تمام اطلاعاتی که کاربر میفرسته نیاز دارم و این اطلاعات از داخل یک textarea برداشته میشه و ممکن هر جور متنی باشه و اندازه آن معلوم نیست.

اگه میشه خودتون یه مثال بزنید که چجوری با json اطلاعات با مشخصاتی که گفتم رو بفرستم.

تو خود جاوا و php همه چی درسته فقط یا هنگام ارسال با ajax تغییراتی میشه یا هنگام دریافت.

sadegh1362
چهارشنبه 21 اسفند 1392, 05:41 صبح
شما باید با دستورات php‌یک تابع بنویسید . که عملیات مورد نظرتون رو انجام بده حالا هرچی که باشه وقتی میخواید اطلاعات رو ارسال کنید از این عبارت در انتهای تابع استفاده کنید :
echo json_encode($value);
بعد از اینکه مقدار رو با json فرستادید . تابع رو در هر صفحه ای مد نظرتون هست صدا بزنید . url اون صفحه رو به ajax بدید و مقدار type data در ajax روی json تنظیم کنید . تمامی داده ها با خروجی ajax قابل رویت میشه .
موفق باشید.

h.rezaee
چهارشنبه 21 اسفند 1392, 07:48 صبح
سلام. یک مقدار حس می کنم کدت رو پیچوندی. شاید هم اینجوری نباشه ؟!
ببین من از این راه برای این کار استفاده میکنم. مثلا ما یک فرمی داریم که 2 مقدار میگیره :

نام : <input type="text" id="txtfname" />
نام خانوادگی : <input type="text" id="txtlname" />
<a style="color:#000;" href="javascript:void(0)" onclick="savenewval()"></a>
<div id="message"></div>

توضیح: یک فرم ساختیم که دو مقدار نام و نام خانوادگی رو میگیره و با استفاده از کد js ، تابع savenewval() رو فراخوانی می کنیم.
حالا کد تابع savenewval :

function savenewval()
{

firstname = $('#txtfname').val();
lastname = $('#txtlname').val();

$.post('../ajax.php',
{
txtfname:firstname,
txtlname:lastname
}
,function(data)
{

$('#message').html(data);
alert('رکورد با موفقیت اضافه شد.');

}

);
}

با این کار مقادیر رو از فرم که دریافت کردیم به فایل ajax.php مربوطه می فرستیم.در این قسمت میتونی هر نوع Form Validate و .... که می خواهی قبل از ارسال انجام بدی رو چک کنی.
حالا کد قسمت ajax.php

if(isset($_POST['txtfname']))
{
if(INSERT INTO TBL (fname , lname) VALUES ($_POST['txtfname']
, $_POST['txtlname']
))
echo "رکورد با موفقیت افزوده شد.";
else
echo 'مشکلی در ثبت بوجود آمده است';

}


در این قسمت هم مقادیر دریافتی از فرم در جدول مربوطه ثبت میشه. اگه درست ثبت شده پیغام "رکورد با موفقیت افزوده شد." در <div id="message"></div> نمایش داده میشه در غیر این صورت پیغام خطا نمایش داده میشه.
موفق باشی.

Parviz-Turk
چهارشنبه 21 اسفند 1392, 09:40 صبح
با تشکر از دوستان.

من تمام گفته های شماهارو تست کردم نشد. حتی تابع Base64 Encode رو تو جاوا پیدا کردم و encode کردم که تو متن ارسالی کاراکتر & و... نباشه ولی بازم بعد 10-20 سطر اطلاعات

رو یا ناقص ارسال میکنه یا تغییر ایجاد میکنه. فکر کنم تنها مشکل حجم زیاد اطلاعات باشه. چون مثلا دیتاهای 3-4 سطری رو به راحتی ارسال و دریافت میکنه.

بر فرض مثال شما با این روش هایی که گفتین این کد php رو به عنوان دیتای ورودی از طریق ajax ارسال و دریافت کنین ببینین درست دریافت میشه یا نه؟




session_start();

@error_reporting ( E_ALL ^ E_WARNING ^ E_NOTICE );
@ini_set ( 'display_errors', true );
@ini_set ( 'html_errors', false );
@ini_set ( 'error_reporting', E_ALL ^ E_WARNING ^ E_NOTICE );

define('DATALIFEENGINE', true);
define('ROOT_DIR', dirname (__FILE__));
define('ENGINE_DIR', ROOT_DIR.'/engine');

$config['charset'] = "utf-8";

require_once(ROOT_DIR.'/language/Farsi/adminpanel.lng');
require_once(ENGINE_DIR.'/inc/include/functions.inc.php');
require_once(ENGINE_DIR.'/skins/default.skin.php');
require_once(ENGINE_DIR.'/skins/installation.skin.php');

function GetRandInt($max){

if(function_exists('openssl_random_pseudo_bytes') && (version_compare(PHP_VERSION, '5.3.4') >= 0 || strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN')) {
do{
$result = floor($max*(hexdec(bin2hex(openssl_random_pseudo_b ytes(4)))/0xffffffff));
}while($result == $max);
} else {

$result = mt_rand( 0, $max );
}

return $result;
}

function generate_auth_key() {

$arr = array('a','b','c','d','e','f',
'g','h','i','j','k','l',
'm','n','o','p','r','s',
't','u','v','x','y','z',
'A','B','C','D','E','F',
'G','H','I','J','K','L',
'M','N','O','P','R','S',
'T','U','V','X','Y','Z',
'1','2','3','4','5','6',
'7','8','9','0','.',',',
'(',')','[',']','!','?',
'&','^','%','@','*',' ',
'<','>','/','|','+','-',
'{','}','`','~','#',';',
'/','|','=',':','`');

$key = "";
for($i = 0; $i < 64; $i++)
{
$index = GetRandInt(count($arr))-1;
$key .= $arr[$index];
}
return $key;
}

extract($_REQUEST, EXTR_SKIP);

if($_REQUEST['action'] == "function_check")
{

if ( !$_SESSION['dle_install'] ) msg( "", "خطا", "به صفحه اصلي نصب سيستم بازگرديد و مراحل نصب را از اول طي کنيد.<br /><br /><a href=\"http://{$_SERVER['HTTP_HOST']}/install.php\">http://{$_SERVER['HTTP_HOST']}/install.php</a>" );

echoheader("", ""); ) ENGINE=MyISAM /*!40101 DEFAULT CHARACTER SET " . COLLATE . " COLLATE " . COLLATE . "_general_ci */";

id1385
پنج شنبه 22 اسفند 1392, 15:02 عصر
سلام
خودتو خیلی اذیت نکن، یا آدرست اشتباه یا هم کد نویسیت.
از لینک زیر فایلو دانلود کن نمونه کاملیه می تونی ببینیش
البته یادت باشه خیلی اصولی نبود بدل نگیری چون مال خیلی وقت پیشه
موفق باشی

لینک:
http://barnamenevis.org/showthread.php?362762-%D9%86%D9%85%D9%88%D9%86%D9%87-%DA%A9%D8%A7%D9%85%D9%84-%D8%AB%D8%A8%D8%AA-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA%D8%8C-%D8%AF%D8%B1%DB%8C%D8%A7%D9%81%D8%AA-%D9%88-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-jquery-%D9%88-php&p=1601357&viewfull=1#post1601357

id1385
پنج شنبه 22 اسفند 1392, 15:21 عصر
اینم یه نمونه

js:

$("button#tCatCreat").bind("click", function() {
var tName = $("input#tCatName");
var tDesc = $("input#tCatDescribe").val();
var tFaal = $("input#tCatActive").is(':checked');
var tPrivate = $("input#tCatPrivate").is(':checked');
var tData = new Array();
if (tName.val() === "" || tName.val() === null) {
tName.focus();
alert("نام دسته بندی را وارد نمایید");
return;
}
tData[tData.length] = tName.val();
tData[tData.length] = tDesc;
tData[tData.length] = tFaal;
tData[tData.length] = $(this).attr('data-type');
tData[tData.length] = ($(this).attr('data-token') === undefined || $(this).attr('data-token') === "" ? "Null" : $(this).attr('data-token'));
tData[tData.length] = tPrivate;
savetData(tData, "");
});



function savetData(eData, e) {
var loading = '<div class="fb-loading"><span></span></div>';
$(".fb-loading").remove();
if (tbl) {
$(".dataTables_processing").css("visibility", "visible");
} else {
$("div#tpan").append(loading);
}
$.post(erl, {data: eData}, function(Response) {
//alert(Response);
if (Response && Response !== "") {
var json = $.parseJSON(Response);
var result = json[0];
var desc = json[1];


// add response
if (result === "added") {
$("div#tpan input").val("");
set_values();
r_loading();
$("#tCatCreat").html(default_text);
}


// edit response
if (result === "called") {
$("div#tpan input").val("");
$("input#tCatName").val(json[1]);
$("#tCatDescribe").val(json[2]);
if (json[3] === 1) {
$("#tCatActive").attr('checked', 'checked');
} else {
$("#tCatActive").removeAttr('checked');
}
if (json[5] === 1) {
$("#tCatPrivate").attr('checked', 'checked');
} else {
$("#tCatPrivate").removeAttr('checked');
}
$("#tCatCreat").attr('data-token', json[4]).attr('data-type', "save_edit").html(edit_text).toggleClass('btn-purple');
$("div#tpan").append('<button class="btn btn-mini btn-inverse" style="margin-left: 3px;" id="clearInputs"></i>\u062a\u062e\u0644\u06cc\u0647<i class="icon-bolt icon-on-right bigger-140"></i></button>');
$("div#tpan").append('<button class="btn btn-mini btn-yellow" id="cancelEdit"></i>\u0628\u06cc \u062e\u06cc\u0627\u0644<i class=" icon-eye-close icon-on-right bigger-140 red"></i></button>');
active_action = true;
$("input#tCatName").select();
r_loading();
}


// edit save response
if (result === "Edidted") {
$("#cancelEdit").click();
r_loading();
set_values();
}


// change state
if (result === "Changed") {
$("#cancelEdit").click();
var res = (desc === true || desc === "true");
e.attr("checked", res);
r_loading();
}

// delete response
if (result === "deleted") {
$("#cancelEdit").click();
r_loading();
set_values();
}


if (result === "Error") {
alert(error + '1 . [' + desc + ']\n\n');
r_loading();
}
}


}); // post
}






php:


// check posted data
if (isset($_REQUEST['data']) && is_array($_REQUEST['data']) && (count($_REQUEST['data']) === 6 )) { $data = $_POST['data']; } else { die(json_encode(array('Error', $GLOBALS['data_error'] . '__' . count($_REQUEST['data'])))); }


// print data from an array
list($tName, $tDesc, $tFaal, $tType, $tToken, $admin_only) = $data;
// check printed data
if (globals::stripTags($tName) !== "" && in_array(trim($tType), array("add", "edit", "delete", "change", "save_edit"))) { $tDesc = globals::stripTags($tDesc); $tFaal = strtolower($tFaal) === "true" ? true : false; $admin_only = strtolower($admin_only) === "true" ? true : false;
!is_bool($tFaal) ? $tFaal = TRUE : ""; !is_bool($admin_only) ? $admin_only = FALSE : "";
// save data and return result as json
echo save_data(array($tName, $tDesc, $tFaal, $tType, $tToken, $admin_only)); } else { die(json_encode(array('Error', $unknow))); }


// save data into db
function save_data($data_array) { // return false if data not be array if (!is_array($data_array) || (count($data_array) < 6 ) || !globals::isConnectable()) { return json_encode(array('Error', $data_error)); }
// check for request type $__req = $data_array[3];
switch ($__req) { case "add": return addNew($data_array); break;
case "edit": return select_data($data_array); break;
case "save_edit": return save_edit($data_array); break;
case "change": return change_group_state($data_array); break;
case "delete": return delete_an_item($data_array); break; } }

function addNew($data_array) { $db = _connectDb(); if (!$db) { return json_encode(array('Error', $db_error)); } $str_sql = "SELECT * FROM `k_dastebandi` WHERE `dasteh_name` = '" . mysql_real_escape_string($data_array[0]) . "' LIMIT 1;"; $count = globals::recordCount($str_sql); if ($count > 0) { return json_encode(array('Error', sprintf($GLOBALS["dubl"], $data_array[0]))); }
if (strtolower($data_array[3]) === "add") { $tAdmin = intval($data_array[5] === "true" || $data_array[5] === true ? 1 : 0); $str_sql = "INSERT INTO `k_dastebandi` (`dasteh_name`, `dasteh_sharh`, `dasteh_faal`, `dasteh_tavasote`, `dasteh_tarikh_ijad`,`dasteh_private`) VALUES ('%s','%s', '%s', '%s', '%s', '%s');"; $str_sql = sprintf($str_sql, $data_array[0], $data_array[1], $data_array[2], globals::admin_dsiplay(true), date("Y-m-d H:m:s"), $tAdmin); $result = $db->run($str_sql); if ($result) { return json_encode(array('added', 'ok')); } } }

یه کم وقت بزاری سریع یاد می گیری
نمونه سمت کاربر این برنامه رو در آدرس زیر میتونی ببیی
فقط باید ثبت نام کنی
همش هم با جیکوئری انجام میشه

http://ferdows.net/order/

tux-world
جمعه 23 اسفند 1392, 06:24 صبح
فایرباگ رو نصب کن و اون مقدار POST که هستش رو بزارید اینجا تستش کنیم