#115139: Add centralized json handler (and send text/javascript content-type header).
parent
fe8b35f527
commit
569ede574f
|
@ -2122,6 +2122,24 @@ function drupal_to_js($var) {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return data in JSON format.
|
||||
*
|
||||
* This function should be used for JavaScript callback functions returning
|
||||
* data in JSON format. It sets the header for JavaScript output.
|
||||
*
|
||||
* @param $var
|
||||
* (optional) If set, the variable will be converted to JSON and output.
|
||||
*/
|
||||
function drupal_json($var = NULL) {
|
||||
// We are returning JavaScript, so tell the browser.
|
||||
drupal_set_header('Content-Type: text/javascript; charset=utf-8');
|
||||
|
||||
if (isset($var)) {
|
||||
echo drupal_to_js($var);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrapper around urlencode() which avoids Apache quirks.
|
||||
*
|
||||
|
|
|
@ -742,16 +742,15 @@ function profile_form_profile($edit, $user, $category, $register = FALSE) {
|
|||
* Callback to allow autocomplete of profile text fields.
|
||||
*/
|
||||
function profile_autocomplete($field, $string) {
|
||||
$matches = array();
|
||||
if (db_result(db_query("SELECT COUNT(*) FROM {profile_fields} WHERE fid = %d AND autocomplete = 1", $field))) {
|
||||
$matches = array();
|
||||
$result = db_query_range("SELECT value FROM {profile_values} WHERE fid = %d AND LOWER(value) LIKE LOWER('%s%%') GROUP BY value ORDER BY value ASC", $field, $string, 0, 10);
|
||||
while ($data = db_fetch_object($result)) {
|
||||
$matches[$data->value] = check_plain($data->value);
|
||||
}
|
||||
|
||||
print drupal_to_js($matches);
|
||||
}
|
||||
exit();
|
||||
|
||||
drupal_json($matches);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1506,12 +1506,12 @@ function taxonomy_autocomplete($vid, $string = '') {
|
|||
|
||||
// Fetch last tag
|
||||
$last_string = trim(array_pop($array));
|
||||
$matches = array();
|
||||
if ($last_string != '') {
|
||||
$result = db_query_range(db_rewrite_sql("SELECT t.tid, t.name FROM {term_data} t WHERE t.vid = %d AND LOWER(t.name) LIKE LOWER('%%%s%%')", 't', 'tid'), $vid, $last_string, 0, 10);
|
||||
|
||||
$prefix = count($array) ? implode(', ', $array) .', ' : '';
|
||||
|
||||
$matches = array();
|
||||
while ($tag = db_fetch_object($result)) {
|
||||
$n = $tag->name;
|
||||
// Commas and quotes in terms are special cases, so encode 'em.
|
||||
|
@ -1520,9 +1520,9 @@ function taxonomy_autocomplete($vid, $string = '') {
|
|||
}
|
||||
$matches[$prefix . $n] = check_plain($tag->name);
|
||||
}
|
||||
print drupal_to_js($matches);
|
||||
exit();
|
||||
}
|
||||
|
||||
drupal_json($matches);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -741,7 +741,10 @@ function upload_js() {
|
|||
// @todo: Put status messages inside wrapper, instead of above so they do not
|
||||
// persist across ajax reloads.
|
||||
$output = theme('status_messages') . drupal_render($form);
|
||||
|
||||
// We send the updated file attachments form.
|
||||
// Don't call drupal_json(). upload.js uses an iframe and
|
||||
// the header output by drupal_json() causes problems in some browsers.
|
||||
print drupal_to_js(array('status' => TRUE, 'data' => $output));
|
||||
exit;
|
||||
}
|
||||
|
|
|
@ -2827,8 +2827,8 @@ function user_autocomplete($string = '') {
|
|||
$matches[$user->name] = check_plain($user->name);
|
||||
}
|
||||
}
|
||||
print drupal_to_js($matches);
|
||||
exit();
|
||||
|
||||
drupal_json($matches);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue